在 Java 单例中,大多数人告诉我们我们需要 volatile 来防止指令重新排序,但有人告诉我它在高版本 JDK 中不再需要 volatile,对吗?如果是这样,为什么?
public class SafeDCLFactory {
private volatile Singleton instance;
public Singleton get() {
if (instance == null) { // check 1
synchronized(this) {
if (instance == null) { // check 2
instance = new Singleton();
}
}
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud) java ×1