pet*_*ter 4 java singleton multithreading
我想知道在多线程环境中实践中哪个更好。我将 Singleton 理解为 Enum 类型在加载类时创建一个实例。除此之外,我没有看到任何其他重要的东西。有什么优点和缺点吗?
单例Enum类型:
public enum Singleton {
INSTANCE;
public void doSomething(){ ... }
}
Run Code Online (Sandbox Code Playgroud)
单身人士double-checked locking:
public class Singleton{
private volatile static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
通常在多线程应用程序中,更简单、更容易理解的代码更容易工作。
在我看来,第一个例子是显著比第二个简单的,这是最重要的。
使用 an 的主要优点enum是它更简单,更复杂的例子是不合理的。双锁示例允许您以有趣的方式为单元测试更改单例,但我相信这给您带来的问题可以用另一种方式解决。