《java併發程式設計實戰》筆記(第4章)

2021-08-03 06:12:58 字數 966 閱讀 8077

(十九)設計執行緒安全的類

在設計執行緒安全類的過程中,需要包含以下三個基本要素:

1.找出構成物件狀態的所有變數

2.找出約束狀態變數的不變性條件

3.建立物件狀態的併發訪問管理策略。

19.1– 設計執行緒安全的類

1.類的不變性條件和後驗條件約束了在物件上有哪些狀態和狀態轉換是有效的。

2.某些方法還包含一些基於狀態的先驗條件(precondition),稱為依賴狀態的操作。

(二十)例項封閉 instance confinement

例項封閉是構建執行緒安全類的乙個最簡單的方式,它使得在鎖策略的選擇上擁有了更多的靈活性。

對於其他形式的鎖來說,只要自始至終都是用同乙個鎖,就可以保護狀態。

封閉機制更易於構造執行緒安全的類,因為當封閉了類的狀態時,在分析類的執行緒安全性時就無須檢查整個程式。

@threadsafe

public class personset

public synchronized boolean contain(e e)}

personset的狀態由myset來管理 ,而hashset不是執行緒安全的。但是由於myset是私有的並且不會逸出,因此hashset被封閉在personset中。

唯一能訪問myset的**為 add和contain方法,在執行它們時候都要獲得personset上的鎖,personset的狀態完全由它的內建鎖保護。因此personset

是乙個執行緒安全的類。

(二十一)私有的鎖物件好處

public class privatelock

}使用私有的鎖物件而不是物件的內建鎖,有許多優點:

私有的鎖物件可以將鎖封裝起來,使客戶**無法得到鎖,但是客戶**可以通過公有方法來訪問鎖,以便(正確或者不正確)參與到它的同步策略中。

此外,要想驗證某個公有訪問的鎖在程式中是否被正確的使用,者需要檢查整個程式,而不是單個的類。

併發程式設計實戰筆記 第2章

1 無狀態的物件一定是執行緒安全的。2 不恰當的執行時序,出現不正確的結果,定義為競態條件。3 單狀態變數,使用原子型別 4 多狀態變數互動,使用synchronzied,包括2部分,1 要鎖定的物件 2 要保護的 塊。被保護的 塊,操作可看成乙個事務。5 內建鎖是可重入的,也就是自己去獲取自己已經...

Java併發程式設計實戰筆記(4) 執行緒實現方式

通常我們比較清楚的也比較常見的執行緒實現方式都是一下兩種 這兩個都有乙個缺點就是在執行完之後無法獲取執行結果,如果非要獲取執行結果,只有通過共享變數或者使用執行緒通訊的方式,但是這樣的話是比較麻煩的。jdk1.5之後,就提供了callable和future,通過他們可以在任務執行完成之後獲取執行結果...

Java併發 JAVA併發程式設計實戰 讀書筆記3

發布乙個物件的意思是使它能夠被當前範圍之外的 所使用。比如將乙個引用儲存到其他 可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行...