一、简述
Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做了,直接结束返回。
二、实现
@Slf4j(topic = "c.MonitorService")
class MonitorService {
// 用来表示是否已经有线程已经在执行启动
private volatile boolean starting;
public void start() {
log.info("尝试启动监控线程...");
synchronized (this) {
if (starting) {
return;
}
starting = true;
}
// 真正启动监控线程...
}
}
//用来实现单例
final class Singleton {
private Singleton() {
}
private static Singleton INSTANCE = null;
//synchronized 加锁保证线程安全,放置多个线程同时创建
public static synchronized Singleton getInstance() {
//INSTANCE 作为标记,如果有现成已经创建,则退出
if (INSTANCE != null) {
return INSTANCE;
}
//否则执行创建操作
INSTANCE = new Singleton();
return INSTANCE;
}
}