java多線程併發系列之閉鎖(Latch)和柵欄(CyclicBarrier)

閉鎖(Latch):

一種同步方法,可以延遲線程的進度直到線程到達某個終點狀態。通俗的講就是,一個閉鎖相當於一扇大門,在大門打開之前所有線程都被阻斷,一旦大門打開所有線程都將通過,但是一旦大門打開,所有線程都通過了,那麼這個閉鎖的狀態就失效了,門的狀態也就不能變了,只能是打開狀態。也就是說閉鎖的狀態是一次性的,它確保在閉鎖打開之前所有特定的活動都需要在閉鎖打開之後才能完成

 

柵欄(CyclicBarrier)

柵欄類似於閉鎖,它能阻塞一組線程直到某個事件發生。 柵欄與閉鎖的關鍵區別在於,所有的線程必須同時到達柵欄位置,才能繼續執行。閉鎖用於等待事件,而柵欄用於等待其他線程。

場景: 應用一些協議,比如幾個家庭成員決定在某個地方集合,所有人在6:00在某地集合,到了以後要等待其他人,之後才能討論去哪裏吃飯。 並行迭代,將一個問題分成很多子問題,當一系列的子問題都解決之後(所有子問題線程都已經await()),此時將柵欄打開,所有子問題線程被釋放,而柵欄位置可以留着下次使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章