Java同步工具類
阿新 • • 發佈:2020-08-17
-
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變數罷了