countdownlatch雖然好用,但是也有不足,就是它的計數器不能迴圈使用,是屬於一次性的消費品,對此cyclicbarrier倒是彌補了它這個不足,大部分情況下cyclicbarrier是對countdownlatch的補充,但是兩者還是有一點小小的區別
假如公司團建,大家一起做大巴車,在大巴車出發之前,肯定是需要點名的,只有大家都到車上之後,才會發車,然後到了到了目的地之後,肯定是所有人都下車了,司機才能把車開走,這個過程中涉及了2次大家都就位之後,司機才能繼續操作,可以證明cyclicbarrier可以迴圈使用計數器。
class
flag
public
intgetnum()
public
void
setnum
(int num)
}
public
class
cyclicbarriertest
else})
;for
(int i =
1; i <
6; i++
)catch
(interruptedexception e)
catch
(brokenbarrierexception e)
}, string.
valueof
(i))
.start()
;}system.out.
println
("主線程不阻塞");
}}
執行結果
countdownlatch屬於乙個對多個的(countdownlatch這篇裡有講到過),而cyclicbarrier是多對多的,只要多個執行緒都達到後,自會執行接下來的事,沒有countdownlatch的乙個等多個,多個等乙個的現象。
countdownlatch的計數器只能使用一次,而cyclicbarrier可以迴圈使用。
CyclicBarrier實現原理
cyclicbarrier是乙個同步輔助類,它允許一組執行緒互相等待,直到所有執行緒都到達某個公共屏障點 也可以叫同步點 即相互等待的執行緒都完成呼叫await方法,所有被屏障攔截的執行緒才會繼續執行await方法後面的程式。在涉及一組固定大小的執行緒的程式中,這些執行緒必須不時地互相等待,此時cy...
同步屏障CyclicBarrier
cyclicbarrier操作excel public class bankwaterservice implements runnable private void count throws exception 計算當前sheet的銀流資料,計算 省略 sheetbankwatercount.pu...
CyclicBarrier 使用詳解
從字面上的意思可以知道,這個類的中文意思是 迴圈柵欄 大概的意思就是乙個可迴圈利用的屏障。它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規定必須等到所有人到齊之後才會讓我們進去。這裡...