1. 定义
Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做了,直接结束返回。
2. 实现
public class MonitorService {
//表示是否有线程已经启动了,加上volatile关键字,保证可见性
private volatile boolean starting;
public void start(){
//加上同步锁,保证线程安全
synchronized (this){
//如果已经启动了,直接返回
if(starting){
System.out.println("已经启动了");
return;
}
//如果没有启动,就设置为启动状态
System.out.println("设置为启动状态");
starting = true;
}
//启动线程
new Thread(new Runnable() {
@Override
public void run() {
//执行具体的业务逻辑
try {
System.out.println("执行具体的业务逻辑");
} catch (Exception e) {
e.printStackTrace();
}
finally {
//执行完毕后,将启动状态设置为false
starting = false;
}
}
}).start();
}
}
调用
启动五个线程一起执行
public static void main(String[] args) {
MonitorService monitorService = new MonitorService();
//启动5个线程
monitorService.start();
monitorService.start();
monitorService.start();
monitorService.start();
monitorService.start();
}
结果
设置为启动状态
已经启动了
已经启动了
已经启动了
已经启动了
执行具体的业务逻辑