public class dlcsingleton {
private static volatile dlcsingleton minstance =null; //volatile關鍵字是為了禁止編譯器對 volatile關鍵字修飾的變量進行重排序,并保證volatile變量的讀操作發生在寫操作之後
private dlcsingleton(){
}
public static dlcsingleton getminstance(){
if(minstance == null){ //第一次檢查
synchronized (dlcsingleton.class){ //同步代碼塊
if(minstance == null){ //第二次檢查
minstance = new dlcsingleton();
}
}
}
return minstance;
}
dcl雙重檢查鎖僅在真正建立minstance執行個體的時候加上了synchronized關鍵字。。。而且使用volatile關鍵字修飾,是為了禁止編譯器對volatile變量重排序,并且保證volatile變量的讀操作發生在寫操作之後。