1. 程式人生 > 實用技巧 >Java同步工具類

Java同步工具類

Java同步工具類

  • CountDownLatch(閉鎖)

  • CyclicBarrier(柵欄)

  • Semaphore(訊號量)

為了能夠更好控制執行緒之間的通訊問題

CountDownLatch

CountDownLatch是一個同步的輔助類,允許一個或多個執行緒一直等待直到其它執行緒完成它們的操作

它常用的API其實就兩個:await()countDown()

使用說明:

  • count初始化CountDownLatch,然後需要等待的執行緒呼叫await方法。await方法會一直受阻塞直到count=0。而其它執行緒完成自己的操作後,呼叫countDown()使計數器count減1。當count減到0時,所有在等待的執行緒均會被釋放

  • 說白了就是通過count變數來控制等待,如果count值為0了(其他執行緒的任務都完成了),那就可以繼續執行。

CyclicBarrier

CyclicBarrier允許一組執行緒互相等待,直到到達某個公共屏障點。叫做cyclic是因為當所有等待執行緒都被釋放以後,CyclicBarrier可以被重用(對比於CountDownLatch是不能重用的)

使用說明:

  • CountDownLatch注重的是等待其他執行緒完成,CyclicBarrier注重的是:當執行緒到達某個狀態後,暫停下來等待其他執行緒,所有執行緒均到達以後,繼續執行

Semaphore

Semaphore(訊號量)實際上就是可以控制同時訪問的執行緒個數

,它維護了一組"許可證"

  • 當呼叫acquire()方法時,會消費一個許可證。如果沒有許可證了,會阻塞起來

  • 當呼叫release()方法時,會新增一個許可證。

  • 這些"許可證"的個數其實就是一個count變數罷了