我想知道在多线程环境中哪一个更好.我理解Singleton作为Enum类型在加载类时创建一个实例.除此之外我没有看到任何其他重要的东西.有利有弊吗?
Singleton as Enum类型:
public enum Singleton {
INSTANCE;
public void doSomething(){ ... }
}
Singleton双重锁定:
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;
}
}
解决方法:
通常在多线程应用程序中,更简单,更易于理解的代码更有可能工作.
在我看来,第一个例子比第二个例子简单得多,这才是最重要的.
使用枚举的主要原因是它更简单,更复杂的例子是不合理的.双锁定示例允许您以有趣的方式更改单例以进行单元测试,但我相信这可以通过另一种方式解决.
标签:java,multithreading,singleton
来源: https://codeday.me/bug/20190823/1696239.html