我尝试使用预先加载来编写Singleton类,请参阅下面的解决方案。我已将构造函数设为私有以防止访问,并且成员字段也是私有的,因此无法在类范围之外访问它。
public class Test {
private static Test t = new Test();
private Test() {
}
public static Test getInstance() {
return t;
}
}
那么,考虑到所有场景,这部分线程是否安全?
答案 0 :(得分:1)
使用枚举单例模式:
public enum xxton {
INSTANCE;
}
由于 Singleton Pattern 是关于拥有一个私有构造函数并调用一些方法来控制实例化(比如某些getInstance
),所以在Enums中我们已经有了一个隐式的私有构造函数。
我不完全知道 JVM 或某些容器如何控制Enums
的实例,但它似乎已经使用了隐式{{ 1}},不同之处在于我们不会调用Singleton Pattern
,我们只需要调用Enum。
更一般地说,您可以提供getInstance
方法,如下所示:
readResolve()