【发布时间】:2018-03-27 04:50:13
【问题描述】:
这里是单例设计模式的实现之一:The Hungry implementation。
我了解到这种方式既可以只创建一个实例,又可以保证线程安全。
很容易理解只有一个实例,因为实例只是在类加载过程中创建的。
但是这怎么可能是线程安全的呢?在线文档说这也是因为实例是在加载类时创建的。但我不明白,这个实例如何在多线程情况下保持同步?这对我来说很模糊。有人能回答一下吗,先谢谢了。
public class Hunger {
private static Hunger instance = new Hunger();
private Hunger() {}
public static Hunger getInstance() {
return instance; //When multi threads call this, there maybe a problem since only instance is provided.
}
}
【问题讨论】:
-
实例未同步。
-
那么它是线程安全的吗?我很困惑。
-
getInstance 是
-
我猜你可以说是因为没有非静态方法...
-
@doctorwhorm 我认为您对(1)获取对象和(2)使用对象的线程安全性感到困惑。这些是完全分开的。单例模式大约是 (1)。对象如何管理 (2) 是完全独立的事情,Hungry/Lazy 对此无话可说。
标签: java design-patterns thread-safety singleton