【发布时间】:2014-03-11 18:28:56
【问题描述】:
使用以下两个版本的Singleton Classes有什么区别
首先我使用的是 synchronized(Singleton.class)
第二次我使用 synchronized(Obj) //第一个类型 公共类单例 {
private static Singleton obj = null;
Singleton() {
}
public static Singleton getInstance() {
synchronized(Singleton.class){
if (obj == null) {
obj = new Singleton();
}
}
return obj;
}
}
//第二种类型
public class Singleton {
private static Singleton obj = null;
Singleton() {
}
public static Singleton getInstance() {
synchronized(obj){
if (obj == null) {
obj = new Singleton();
}
}
return obj;
}
}
【问题讨论】:
-
在第二个示例中同步 null 没有意义
-
嗯,您确实在第二个版本中意识到,在第一次通话时您将在
null上同步?为什么不在静态初始化器中初始化你的单例呢? -
我是多线程新手,所以不能真正理解 synchronized(
标签: java synchronization thread-safety singleton