Java設計模式-單例模式-懶漢式-同步程式碼塊

  • 2020 年 3 月 17 日
  • 筆記

優缺點說明

1)這種方式,本意是想對懶漢式-執行緒安全這種方式進行的改進,因為前面同步方法效率太低,改為同步產生實例化的程式碼塊

2)但是這種同步並不能起到執行緒同步的作用。跟懶漢式-執行緒不安全遇到的情形是一樣的,假如一個執行緒進入了if (singleton == null)判斷語句塊,還沒有來得及往下執行,另一個執行緒也通過了這個判斷語句,這時便會產生多個實例

3)結論:在實際開發中,不能使用這種方式

public class SingletonTest05 {      public static void main(String[] args) {          Singleton05 instance  = Singleton05.getInstance();          Singleton05 instance01 = Singleton05.getInstance();            System.out.println(instance == instance01);          System.out.println("instance,hashCode= " + instance.hashCode());          System.out.println("instance01,hashCode = " + instance01.hashCode());      }  }    class Singleton05{      private static Singleton05 singleton05;      private Singleton05(){}        public static Singleton05 getInstance(){          if (singleton05 == null){              synchronized (Singleton05.class){                  singleton05 = new Singleton05();              }          }          return singleton05;      }  }    // 運行結果  true  instance,hashCode= 1846274136  instance01,hashCode = 1846274136