【发布时间】:2018-10-07 11:20:46
【问题描述】:
我喜欢 java 中“渴望单例”的简单性,大多数关于它的文章都称其创建线程安全。
class Singleton {
public static final Singleton instance = new Singleton ();
private Singleton (){};
public static Singleton getInstance(){
return instance;
}
}
但是,我听到一些声称它的创建可能不是线程安全的。例如,一位消息人士声称,如果使用超过 1 个类加载器或 App 域,则不安全。
JVM 是否保证“Eager Singleton”的创建是线程安全的,例如,2 个线程不会意外地同时创建单例?
编辑: 对象创建的线程安全是否需要关键字 final?如果字段不是最终的,它不是线程安全的吗?
【问题讨论】:
-
我听说过一些说法...来源???
-
如果我们不是在谈论
synchronized,我们就不是在谈论线程安全性。它们是网络上的大量示例,例如:journaldev.com/1377/… -
@maspinu 不知道您所说的“如果我们不是在谈论同步,我们不是在谈论线程安全性”是什么意思,但是您发布的链接证实了 OP 急切的单例模式使用是安全的(这是正确的)
-
如果你有多个类加载器在运行,你可以有多个不同版本的代码,正如你所期望的那样。
标签: java multithreading singleton