加同步块与volatile即可
public class MyBenchmark {
public static void main(String[] args) {
new Thread(() -> {
Singleton instance1 = Singleton.getInstance();
}, "t1").start();
new Thread(() -> {
Singleton instance2 = Singleton.getInstance();
}, "t2").start();
}
}
@Slf4j(topic = "c.Singleton")
class Singleton {
private static volatile Singleton instance;
private Singleton() {
}
// 双重检查
public static Singleton getInstance() {
if (instance == null) { //t1、t2都可进入
synchronized (Singleton.class) {
if (instance == null) { //t1进入后,随后t2不可再进入
instance = new Singleton();
log.debug("已创建");
}
}
}
return instance;
}
}
本文介绍了一种使用双重检查加volatile实现线程安全单例模式的方法。通过在Singleton类中使用volatile关键字修饰静态实例变量,并结合双重检查锁机制,确保了多线程环境下Singleton实例的唯一性和可见性。

862

被折叠的 条评论
为什么被折叠?



