package com.abin.lee.collection.singleton;
/**
* 雙重檢查加鎖 單例模式
* @author abin
* 這個單例模式寫法可以大大減少getInstance的時間消耗!
*/
public class SingletonOne {
/**
* volatile關鍵詞確保:當singleton變量被初始化成SingletonOne實例時,多個線程正確地處理singleton變量
*/
private volatile static SingletonOne singleton=null;
public SingletonOne(){}
public static SingletonOne getInstance(){
if(null==singleton){//檢查實例,如果不存在就進入同步區塊
synchronized (SingletonOne.class) {//注意,只有第一次才徹底執行這里的代碼
if(null!=singleton){
singleton=new SingletonOne();
}
}
}
return singleton;
}
}
package com.abin.lee.collection.singleton;
public class SingletonTwo {
/**
* volatile關鍵詞確保:當uniqueInstance變量被初始化成Singleton實例時,
* 多個線程正確地處理uniqueInstance變量
*/
private volatile static SingletonTwo singleton = new SingletonTwo();
private SingletonTwo() {
}
public static SingletonTwo getInstance() {
return singleton;
}
}