1. 程式人生 > >第三章-執行緒同步工具(引言)

第三章-執行緒同步工具(引言)

宣告:本文是《 Java 7 Concurrency Cookbook 》的第三章, 作者: Javier Fernández González 譯者:鄭玉婷

3
執行緒同步工具

章節提要:

併發地訪問資源的控制
併發地訪問多個副本資源的控制
等待多個併發事件
在一個相同點同步任務
併發的階段性任務的執行
併發地階段性任務的階段改變的控制
在併發任務間改變資料

介紹

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