1. 程式人生 > >Java多執行緒程式設計中不變模式的詳解

Java多執行緒程式設計中不變模式的詳解

Java多執行緒程式設計中,常用的多執行緒設計模式包括:Future模式、Master-Worker模式、Guarded Suspeionsion模式、不變模式和生產者-消費者模式等。這篇文章主要講述不變模式,關於其他多執行緒設計模式的地址如下:
關於Future模式的詳解: Java多執行緒程式設計中Future模式的詳解
關於Master-Worker模式的詳解: Java多執行緒程式設計中Master-Worker模式的詳解
關於Guarded Suspeionsion模式的詳解: Java多執行緒程式設計中Guarded Suspeionsion模式的詳解
關於生產者-消費者模式的詳解:生產者-消費者模式Java詳解


1. 不變模式的核心思想

在並行開發過程中,為確保資料的一致性和正確性,又必要對物件進行同步,但是同步操作對系統性能有相當的損耗。因此可以使用一種不可改變的物件,依靠其不變形來確保並行操作在沒有同步的情況下依舊保持一致性和正確性。

不變模式的使用場景主要包括兩個條件:

a. 當物件建立後,其內部狀態和資料不再發生任何改變;

b.物件需求被共享、被多執行緒頻繁訪問。

2. 不變模式的Java實現

在Java語言中,不變模式的實現很簡單,只需要注意一下4點:

a. 去除所有setter方法以及可以修改自身屬性的方法;

b. 將所有屬性設定為private的,並用final標記,確保其不可修改;

c. 確保沒有子類可以繼承該類;

d. 有一個可以建立完整物件的建構函式。

下面利用Java程式碼實現了滿足上面4點的不變模式的類:

  1. publicfinalclass Product { //final可以確保不會被繼承
  2.     privatefinal String a;  //private確保不可被訪問,final確保不可被修改
  3.     privatefinal String b;  
  4.     privatefinaldouble c;  
  5.     public Product(String a, String b, double c) {  
  6.         //建立物件時必須指定值,因為建立後將無法修改
  7.         this.a = a;  
  8.         this.b = b;  
  9.         this.c = c;  
  10.     }  
  11.     public String getA() {  
  12.         return a;  
  13.     }  
  14.     public String getB() {  
  15.         return b;  
  16.     }  
  17.     publicdouble getC() {  
  18.         return c;  
  19.     }  
  20. }  

3. JDK中不變模式的例項

JDK中不變模式的使用也非常廣泛。其中最為典型的是java.lang.String,此外還有所有元資料的包裝類,如:

java.lang.Double

java.lang.Integer

java.lang.Boolean

等等。


本文完。轉載請註明出處。

參考文獻

葛一鳴,Java程式效能優化.清華大學出版社.