【发布时间】:2018-02-12 12:14:02
【问题描述】:
下面的代码是 Java 中线程安全单例模式的正确示例吗?
class Singleton {
private static Singleton INSTANCE = new Singleton();
public static Singleton getInstance() {
return INSTANCE;
}
}
由于静态成员只初始化一次,在JVM加载类时保证是线程安全的,所以这不是线程安全Singleton类(早期加载)的上述代码示例吗?
上面的说法有什么问题吗?如果是,那么将其转换为线程安全的 Singleton 类需要进行哪些最小更改?
【问题讨论】:
-
它是完全线程安全的。
-
您在有关初始化此类的声明中是正确的,但是实例不是最终的,因此当您将另一个对象分配给变量时可能会发生一些无法预料的行为。
-
你也可以看看 => javarevisited.blogspot.in/2012/12/…
-
谢谢维克兰特。第一个链接仅指延迟初始化示例,其中第二个链接提到了确切的内容
标签: java multithreading singleton