日期:2014-05-20  浏览次数:20733 次

大家来看看这个线程安全的Singleton单例???
Java code
1./* 安全的方式  */  
2.public class Singleton {   
3.  
4.  private static Singleton instance = new Singleton();   
5.  
6.  private Singleton() {}   
7.  
8.  public static Singleton getInstance() {   
9.    return instance;   
10.  }   
11.  
12.} 

/*非线程安全的方式*/
1.public class Singleton {   
2.       
3.    private Singleton() {}   
4.    private static Singleton instance = null;   
5.  
6.    public static Singleton getInstance() {   
7.        if(instance == null) {   
8.            instance = new Singleton();   
9.        }   
10.        return instance;   
11.    }   
12.}  
 


我看到解释如下:第一种方式虽然没有使用同步,但确保了调用static getInstance()方法时才创建Singleton的引用(static 的成员变量在一个类中只有一份)。
---------------------------
我不理解的是,为何说是“调用static getInstance()方法时才创建Singleton的引用”
不是一开始申明static变量的时候就创建了吗private static Singleton instance = new Singleton();  
按我的理解两种方式申明instance不是一样的么,都是private static的,只是创建时间不一样而已
为何说第一种比第二种安全?

忘高手详细解释,指点一下

------解决方案--------------------
探讨
我看到解释如下:第一种方式虽然没有使用同步,但确保了调用static getInstance()方法时才创建Singleton的引用(static 的成员变量在一个类中只有一份)。
---------------------------
我不理解的是,为何说是“调用static getInstance()方法时才创建Singleton的引用”
不是一开始申明static变量的时候就创建了吗private static Singleton instance = new Singleton();
按我的理解两种方式申明instance不是一样的么,都是private static的,只是创建时间不一样而已
为何说第一种比第二种安全?

忘高手详细解释,指点一下