多線程下的“高性能類” - “不變模式”

我們知道String的不變性,讓它可以在多線程狀態下發揮高性能的優勢,那我們是否可以將一個類設置爲不變屬性,讓它也可以在多線程下發揮高性能呢?當然可以

前提條件

只有當這個類滿足以下前提,才能設置爲不變模式

  • 當對象創建後,其內部狀態和數據不能發生任何變化
  • 數據需要被多線程共享頻繁訪問
設置方法
  • 不能有修改自身屬性的方法,比如setter
  • 將所有屬性設置爲私有,並且用final標記
  • 將類設置爲final,確保子類不能繼承
  • 有一個可以創建完整對象的構造函數
例子
public final class Product {
	private final String  no;
	private final String name;
	private final double price;
	
	public Product(String no, String name, double price) {
		super();
		this.no = no;
		this.name = name;
		this.price = price;
	}
	
	public String getNo() {
		return no;
	}
	public String getName() {
		return name;
	}
	public double getPrice() {
		return price;
	}
}
總結

好了,只要滿足上面的條件,這個類就可以當做“不變”的類了,JDK中7個基礎類型對應的包裝類和String都使用了不變模式,不變模式可以提高系統的併發性能和併發量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章