CountDownLatch、CyclicBarrier和Semaphore

三個併發編程中的輔助類

CountDownLatch

主要實現類似計數器的功能,比方說共有N個工作線程,主線程需要等待N個工作線程都完成之後才能繼續運行,類似這樣的場景就可以用到CountDownLatch。
主要有兩個方法:countDown和await。開始時初始化一個CountDownLatch,並初始化計數值,該對象作爲一個共享變量對每個關注的線程可見,每個工作線程完成之後調用countDown將計數器減一,然後繼續後續的工作。主線程則調用await阻塞等待至計數器爲0,然後再繼續後面的工作。
CountDownLatch使用一次後不能重複使用。這是與後面的CyclicBarrier區別的地方,後者可以重用。

CyclicBarrier

也稱迴環柵欄,該工具的作用是對併發工作的N個線程,保證每個線程在工作到某個特定的狀態之後停下來,直到所有的N的線程都到達了指定的狀態,再分別各自開始運行。
使用方式上,先是生成一個共享的CyclicBarrier對象,並初始化關注N個對象;然後在N個線程中的某個指定的狀態之後調用CyclicBarrier的await。
另外CyclicBarrier是可以重用的。

Semaphore

也稱信號量,應用在控制某類資源最多同時被訪問的數量的場景。初始化時設置最多的同時訪問者數量,
主要方法:

public void acquire() throws InterruptedException {  }     //獲取一個許可
public void acquire(int permits) throws InterruptedException { }    //獲取permits個許可
public void release() { }          //釋放一個許可
public void release(int permits) { }    //釋放permits個許可

上述是阻塞版本,還有非阻塞版本這裏就不提了。

發佈了59 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章