【发布时间】:2021-03-16 11:12:37
【问题描述】:
public static Singleton singleton;
public static Singleton get(){
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
return singleton;
}
有人说singleton 变量没有 volatile 是错误的。但我认为这是创建单例对象的正确代码。我想知道这段代码是否有线程安全?
【问题讨论】:
-
此代码已正确同步。所以它会正常工作;但是,如果您不想在每次获得价值时都为进入锁付出代价,那么还有更好的替代方案。这就是双重检查锁定问题的根源,然后您很快就会遇到易失性。
标签: java multithreading parallel-processing synchronization volatile