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