double-check locking:
第一种方式:public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null){
synchronized(Singleton.class){
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
第二种方式:public class Singleton {
private static Singleton instance = null;
private static final Object object = new Object();
private Singleton(){}
public static Singleton getInstance() {
if (instance == null){
synchronized(object){
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
三:另外的实现方式:2>下面的这种方式呢?public class Singleton {
private static Singleton instance = new Singleton(); private Singleton() {
// ....
} public static Singleton getInstance() {
return instance;
} // 其它实作
}
3>另外这种方式?public class Singleton {
private static class SingletonHolder {
static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
问题1:1>请问第一种方式和第二种方式有什么区别?
性能方面呢?2>另外的方式有什么区别?
性能?安全性?
一个object 一个Singleton.class。 jdk1.5以前别用这种模式,会出问题的。就是1.5以后也要用volatile fix一下(private static volatile Singleton instance = null)后面2种有区别么?只是写法不一样罢了,都是预先初始化。这种方式没有问题,哪都能用。
http://topic.csdn.net/u/20120925/11/cc4584c5-f4f2-4346-880f-fb8d2c2bc5d9.html?seed=759840063&r=79753401#r_79753401
晕死