【发布时间】:2012-08-13 05:33:53
【问题描述】:
我想知道在多线程环境中哪个在实践中更好。我将 Singleton 理解为 Enum 类型在加载类时创建一个实例。除此之外,我没有看到任何其他重要的东西。有什么优点和缺点吗?
作为Enum 类型的单例:
public enum Singleton {
INSTANCE;
public void doSomething(){ ... }
}
单例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;
}
}
【问题讨论】:
-
@DmitryBeransky 这个版本从 1.5 开始是安全的,实际上是 1.4。但即使是 1.6 也面临着生命的终结。 (如果线程安全,我的意思是在确切的代码中是安全的。这是不安全的,因为它很容易出错并且单例很可能是不安全的(当然是不明智的)。)
标签: java multithreading singleton