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點的不變模式的類:

public final class Product { //final可以確保不會被繼承
	private final String a;  //private確保不可被訪問,final確保不可被修改
	private final String b;
	private final double c;
	
	public Product(String a, String b, double c) {
		//創建對象時必須指定值,因爲創建後將無法修改
		this.a = a;
		this.b = b;
		this.c = c;
	}
	
	public String getA() {
		return a;
	}

	public String getB() {
		return b;
	}

	public double getC() {
		return c;
	}
}

3. JDK中不變模式的實例

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

java.lang.Double

java.lang.Integer

java.lang.Boolean

等等。


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

參考文獻

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


發佈了52 篇原創文章 · 獲贊 17 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章