15 保障線程安全的設計技術 無狀態物件

2021-09-11 08:03:45 字數 533 閱讀 7000

如果乙個類的同乙個例項被多個執行緒共享並不會使這些執行緒存在共享狀態, 那麼這個類及其任意乙個例項就被稱為無狀態物件。無狀態物件不含任何例項變數,且不包含任何靜態變數或者其包含的靜態變數都是唯讀的(常量)。

乙個執行緒執行無狀態物件的任意乙個方法來完成某個計算的時候,該計算的瞬時狀態(中間結果)僅體現在區域性變數和(或)只有當前執行執行緒能夠訪問的物件的狀態上。因此,乙個執行緒執行無狀態物件的任何方法都不會對訪問該無狀態物件的其他執行緒產生任何干擾作用。所以,無狀態物件具有固有的執行緒安全性,它可以被多個執行緒共享,而這些執行緒在執行該物件的任何方法時都無須使用同步機制。

無狀態物件具有執行緒安全性,這有兩層含義:

無狀態物件不包含任何例項變數或者可更新靜態變數(包括來自相應類的上層類的例項變數或者靜態變數)。但是,乙個類不包含任何例項變數或者靜態變數卻不一定是無狀態物件。特殊情況下,不包含任何例項變數或者靜態變數的類,其方法實現時仍然需要借助鎖來保障線程安全。無狀態物件的一些方法可能在**維護過程中需要訪問一些非執行緒安全物件,而這些物件的訪問可能導致這些方法的執行執行緒存在共享狀態

16 保障線程安全的設計技術 不可變物件

不可變物件 immutable object 是指一經建立其狀態就保持不變的物件。不可變物件也具有固有的執行緒安全性,因此不可變物件也可以像無狀態物件那樣被多個執行緒共享,而這些執行緒訪問這些共享物件的時候無須加鎖。當不可變物件所建模的現實實體的狀態發生變化時,系統通過建立新的不可變物件例項來進行反...

《併發程式設計》 15 執行緒安全的HashMap

眾所周知,hashmap是執行緒不安全的。但是如果需要乙個執行緒按鈕的hashmap我們需要怎麼做的。其中乙個可行的辦法就是collections.synchronizedmap。如下 就是執行緒安全的hashmap public static map m collections.synchroni...

PKI技術能否保障雲計算的安全與可信?

size medium 由於網際網路的急速發展,儲存 計算機能量消耗,資料急劇增長,成本也隨之公升高,原始的網際網路系統與服務設計已經不能解決上述種種問題,網際網路急需新的解決方案。2007年乙個稱為 雲計算 的概念首次被google提出,這是乙個美麗的網路應用模式。隨後,這一it技術風暴席捲了整個...