天天看點

第三章-線程同步工具(引言)

章節提要:

并發地通路資源的控制

并發地通路多個副本資源的控制

等待多個并發事件

在一個相同點同步任務

并發的階段性任務的運作

并發地階段性任務的階段改變的控制

在并發任務間改變資料

在第二章基本的線程同步中,我們學習了同步和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個教你如何使用以上描述的機制的指南。