`
第三章 策略模式在多线程中的应用
public class TicketWindow extends Thread {
private final String name;
private static final int MAX = 50;
private static int index = 1;
public TicketWindow(String name) {
this.name = name;
}
@Override
public void run() {
while (index <= MAX) {
System.out.println("柜台:" + name + "当前的号码是:" + (index++));
}
}
}
public class Bank {
public static void main(String[] args) {
TicketWindow ticketWindow1 = new TicketWindow("一号柜台");
ticketWindow1.start();
TicketWindow ticketWindow2 = new TicketWindow("二号柜台");
ticketWindow2.start();
TicketWindow ticketWindow3 = new TicketWindow("三号柜台");
ticketWindow3.start();
}
}
二、用Runnable接口将线程的逻辑执行单元从控制中抽取出来public class TicketWindowRunnable implements Runnable {
private int index = 1;
private final static int MAX = 50;
@Override
public void run() {
while (index <= MAX) {
System.out.println(Thread.currentThread() + " 的号码是:" + (index++));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class BankVersion2 {
private final static int MAX = 50;
public static void main(String[] args) {
final TicketWindowRunnable ticketWindow = new TicketWindowRunnable();
Thread windowThread1 = new Thread(ticketWindow, “一号窗口”);
Thread windowThread2 = new Thread(ticketWindow, “二号窗口”);
Thread windowThread3 = new Thread(ticketWindow, “三号窗口”);
windowThread1.start();
windowThread2.start();
windowThread3.start();
}
}
我们都知道java启动多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,但是很多小伙伴可能不知道实现Runnable接口这种方式中运用了“策略模式”这种设计模式。下面我们就一起来看看“策略模式”是如何运用在javaduo线程中的。
01
什么是“策略模式”
针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而使它们可以相互替换。
看完定义,很蒙圈
下面我们一起来看一个贴近生活的例子
02
举例子
我们去商场买衣服,在付钱的时候,我们可以选择支付宝、微信、xyk、现金这几种付款方式,但是不管哪种付款方式,结果是一样的,都是要给那些钱。
根据不同的情况选择不同的付款方式,这其实就有些类似我们的策略模式。
下面结合定义和付钱的这个例子,我们用代码来演示一下“策略模式”
一、定义抽象策略接口
二、具体策略类
三、环境实现类
![在这里插入图片描述](http://www.kaotop.com/file/tupian/20220509/78918a60479d4a3c815af842035bcc0d.png
四、调用
通过上面这个例子,再结合“策略模式”的定义大致就能明白什么是“策略模式”
03
“策略模式”在多线程的应用
了解完什么是“策略模式”之后,我们再来看一看在java多线程中,策略模式是怎么应用的。
看一下Thread的源码和Runnable接口方式实现多线程,你就会明白了
Thread源码
Runnable接口方式实现线程1.继承runnable接口,重写run方法
2.调用
可以看到在初始化Thread类的时候,我们传入了一个Runnable类型的实例,这个实例就是Thread源码中的target,然后调用start的时候,就会去调用我们重写的run方法。传入不同的Runnable实例,就能调用不同的线程方法了。
总结策略模式有很多优点也有很多缺点,怎么使用要结合自己的业务场景,这里主要是结合“策略模式”让大家看清java多线程启动的设计理念和如何更好的阅读源码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)