1. 程式人生 > >CountDownLatch和Cyclicbarrier概念、區別及原理

CountDownLatch和Cyclicbarrier概念、區別及原理

CountDownLatch和Cyclicbarrier概念、區別及原理


1、概念

  CountDownLatch:具有計數器的功能,等待其他執行緒執行完畢,主執行緒在繼續執行,用於監聽某些初始化操作,並且執行緒進行阻塞,等初始化執行完畢後,通知主執行緒繼續工作執行。值得注意的是CountDownLatch計數的次數一定要與構造器傳入的數字一致,比如構造器傳入的是3,則countDown()一定要執行3次,否則執行緒將一直阻塞。CountDownLatch通常用來控制執行緒等待,它可以讓執行緒等待倒計時結束,再開始執行。
  CyclicBrrier:翻譯過來就是迴圈柵欄的意思,其作用就是多執行緒的進行阻塞,等待某一個臨界值條件滿足後,同時執行!假設有一個場景:每個執行緒代表一個跑步運動員,當運動員都準備好後,才一起出發,只要有一個人沒有準備好,大家都等待!

2、區別

  CountDownLatch: 一個執行緒(或者多個), 等待另外N個執行緒完成某個事情之後才能執行。
  CyclicBrrier: N個執行緒相互等待,任何一個執行緒完成之前,所有的執行緒都必須等待。


3、Java 8 下原始碼分析
3.1 CountDownLatch原始碼

coutDownLatch 底層實現了QAS,具體原始碼後面再分析。

3.2 CyclicBrrier原始碼