/*懶漢模式
*優勢:延遲加載
* 缺點:不加同步的懶漢模式是線程不安全的,加了synchronzide以後就變成線程安全的了
*/
public class Singleton {
private static Singleton singleton=null;
private Singleton(){
}
public static synchronized Singleton getSingleton() {
if (singleton==null){
singleton =new Singleton();
}
return singleton;
}
}
/*
* 餓漢模式
* 優勢:線程安全
* 缺點:浪費內存空間
* */
import java.util.Set;
public class Singleton {
private static final Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
/*
* 雙重檢查加鎖模式
* 特色:優化性能又保證線程安全
* */
public class Singleton {
private volatile static Singleton singleton; //使用volatile 1.保證了不一樣線程對這個變量進行操做時的可見性,即一個線程修改了某個變量的值,這新值對其餘線程來講是當即可見的。 2.禁止進行指令重排序 private Singleton(){ } public static Singleton getSingleton(){ if(singleton==null){ //synchronzied消耗性能,提早判斷沒必要每次都進鎖,提升性能 synchronized (Singleton.class){ if(singleton==null){ singleton=new Singleton(); } } } return singleton; }}