章節提要:
并發地通路資源的控制
并發地通路多個副本資源的控制
等待多個并發事件
在一個相同點同步任務
并發的階段性任務的運作
并發地階段性任務的階段改變的控制
在并發任務間改變資料
在第二章基本的線程同步中,我們學習了同步和critical section的内容。基本上,當多個并發任務共享一個資源時就稱為同步,例如:一個對象或者一個對象的屬性。通路這個資源的代碼塊稱為:臨界區。
如果機制沒有使用恰當,那麼可能會導緻錯誤的結果,或者資料不一緻,又或者出現異常情況。是以必須采取java語言提供的某個恰當的同步機制來避免這些問題。
在第二章,基本的線程同步中,我們學會了以下2個同步機制:
關鍵詞同步
lock接口和它的實作類們:reentrantlock, reentrantreadwritelock.readlock, 和 reentrantreadwritelock.writelock
在此章節,我們将學習怎樣使用高等級的機制來達到多線程的同步。這些高等級機制有:
semaphores: 控制通路多個共享資源的計數器。此機制是并發程式設計的最基本的工具之一,而且大部分程式設計語言都會提供此機制。
countdownlatch: countdownlatch 類是java語言提供的一個機制,它允許線程等待多個操作的完結。
cyclicbarrier: cyclicbarrier 類是又一個java語言提供的機制,它允許多個線程在同一個點同步。
phaser: phaser類是又一個java語言提供的機制,它控制并發任務分成段落來執行。全部的線程在繼續執行下一個段之前必須等到之前的段執行結束。這是java 7 api的一個新特性。
exchanger: exchanger類也是java語言提供的又一個機制,它提供2個線程間的資料交換點。
semaphores是最基本的同步機制可以用來在任何問題中保護任何critical section。其他的機制隻有在之前描述的那些有特殊特點的應用中使用。請根據你的應用的特點來選擇适當的機制。
這章有7個教你如何使用以上描述的機制的指南。