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