【发布时间】:2020-04-17 08:39:59
【问题描述】:
我有一个关于我在 Wikipedia 上找到的线程安全单例模式的问题。
public final class Singleton {
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
如果同步块没有同步,是否有可能2个线程同时创建2个对象?
我需要解释一下作业中“同步”的用法。
感谢和问候
【问题讨论】:
-
“线程安全”它并不完全安全。另一个线程可以在
Singleton.class上进行同步,并导致调用getInstance()的线程无限期地阻塞。存在更简单、更健壮的方法(例如枚举或惰性持有者)。
标签: java multithreading synchronized volatile