讀書筆記 java併發程式設計的藝術3 4章

2021-08-17 08:20:56 字數 723 閱讀 7931

可見性:對乙個volatile變數的讀,總是能看到(任意執行緒)對這個volatile變數最後的寫入。

原子性:如果是多個volatile操作或類似於volatile++這種復合操作,整體上不具有原子性

當第二個操作是volatile寫時,不管第乙個操作是什麼,都不能重排序。這個規則確保volatile寫之前的操作不會被編譯器重排序到volatile寫之後

當第乙個操作是volatile讀時,不管第二個操作是什麼,都不能重排序。這個規則確保volatile讀之後的操作不會被編譯器重排序到volatile讀之前

當第乙個操作是volatile寫,第二個操作是volatile讀時,不能重排序

基於保守策略的jmm記憶體屏障插入策略

在每乙個volatile寫操作的前面插入乙個storestore屏障,後面插入乙個store load屏障。

在每乙個volatile讀操作的後面插入乙個load load屏障,插入乙個load store屏障

用volatile和雙重檢查鎖定來避免synchronized存在的巨大效能開銷

基於類初始化的解決方案

jvm在類的初始化階段,會執行類的初始化。在執行類的初始化期間,jvm會獲取乙個鎖,這個鎖可以同步多個執行緒對同乙個類的初始化。

執行緒的狀態

初始 執行狀態 阻塞狀態 等待狀態 超時等待狀態 終止狀態

執行緒間的通訊

等待/通知機制

管道輸入/輸出流

java併發程式設計的藝術 讀書筆記 01

1.1.1 多執行緒一定快嗎?下面 並行一定比序列執行的快嗎?public class concurrencytest private static void concurrency throws interruptedexception 啟動執行緒 thread.start int b 0 for...

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

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

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

為計算結果建立高效 可伸縮的快取記憶體 public inte ce computable public class expensivefunction implements computable public class memoizer1implements computable public ...