CountDownLatch和Cyclicbarrier概念、區別及原理

CountDownLatch和Cyclicbarrier概念、區別及原理


一、概念

  CountDownLatch:具備計數器的功能,等待其餘線程執行完畢,主線程在繼續執行,用於監聽某些初始化操做,而且線程進行阻塞,等初始化執行完畢後,通知主線程繼續工做執行。值得注意的是CountDownLatch計數的次數必定要與構造器傳入的數字一致,好比構造器傳入的是3,則countDown()必定要執行3次,不然線程將一直阻塞。CountDownLatch一般用來控制線程等待,它可讓線程等待倒計時結束,再開始執行。
  CyclicBrrier:翻譯過來就是循環柵欄的意思,其做用就是多線程的進行阻塞,等待某一個臨界值條件知足後,同時執行!假設有一個場景:每一個線程表明一個跑步運動員,當運動員都準備好後,才一塊兒出發,只要有一我的沒有準備好,你們都等待!多線程

二、區別

  CountDownLatch: 一個線程(或者多個), 等待另外N個線程完成某個事情以後才能執行。
  CyclicBrrier: N個線程相互等待,任何一個線程完成以前,全部的線程都必須等待。 ide


三、Java 8 下源碼分析
3.1 CountDownLatch源碼

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

3.2 CyclicBrrier源碼
相關文章
相關標籤/搜索