【发布时间】:2023-03-30 07:02:01
【问题描述】:
我在 java 中看到了一些示例,它们在代码块上进行同步以更改某些变量,而该变量最初被声明为 volatile .. 我在单例类的示例中看到,他们将唯一实例声明为 volatile,并且它们同步了初始化该实例的块......我的问题是为什么我们在同步时声明它是易失的,为什么我们需要同时做这两个?是不是其中一个对另一个就足够了??
public class SomeClass {
volatile static Object uniqueInstance = null;
public static Object getInstance() {
if (uniqueInstance == null) {
synchronized (someClass.class) {
if (uniqueInstance == null) {
uniqueInstance = new SomeClass();
}
}
}
return uniqueInstance;
}
}
提前致谢。
【问题讨论】:
-
什么是“volatile static uniqueInstance = null;” ?
标签: java multithreading volatile synchronized double-checked-locking