1. 程式人生 > >單例模式:兩把鎖版本

單例模式:兩把鎖版本

Singleton Pattern

Ensure a class has only one instance,and provide a global point of access to it .

單例模式的幾個要點:

  • 私有的構造器。禁止外部使用new關鍵字得到例項物件。
  • 通過getInstance()得到例項物件。
  • getInstance方法的內部邏輯
  • 類中例項物件的地方
public class Boy {
     private static Boy boy;
     private volatile static Object initLock = new Object();  
     
     private Test(){} 

     public static Boy getInstance(){
          if (boy == null) {  
        //1、如果有boy返回boy,如果沒boy到2。
        //2、檢視執行緒鎖:如果initLock被鎖了就等待;如果initLock沒有鎖就繼續3並且給initLock加鎖。		
        //3、如果有t返回t,如果沒t就new Test()。
              synchronized (initLock) {       //synchronized鎖的是固定物件
                   if (t == null) {
                        t = new Test();
                   }
              }
          }
          return t;
     }
}

public class Demo {
     public static void main(String[] args) {
          Boy boy = Boy.getInstance();
     }
}

– 參考 synchronized鎖住的是程式碼還是物件