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>另外的方式有什么区别?
性能?安全性?
解决方案 »
- 有关接口的实现问题!!请高人指点!!!!!
- 关于接口的一个问题,
- SWT中TableEditor
- 菜鸟提问了
- 各位大侠帮我把这段代码调一下,并把调试通过的代码帖出来!谢谢了,解决了立即给分,在线等!!~~~~~~~
- 使用org.apache.cocoon.*和org.apache.fop.*需要导入那2个jar文件,谢谢个为了。
- 800分结帖请feiyuegaoshan(飞跃)领分
- jdk文档在那里下载?
- (向高手门致敬!)Visual Age for JAVA,我需要看什么书?
- 听起来很好笑、很幼稚的问题...
- [40分:结贴超快]singleton模式同步锁问题
- 求教 java用三个输出语句菱形
一个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
晕死