JAVA併發編程梳理與學習四(CountDownLatch和CyclicBarrier)

一、CountDownLatch
1.閉鎖。CountDownLatch可以等其他線程完成一些工作後再執行。例如,應用主線程再等框架裏面的其他線程加載完一些東西后,再執行就可以使用CountDownLatch
2.CountDownLatch是通過一個計數器實現的,計數器初始值爲初始任務數量。每當完成一個任務後,計數器減1(需要調CountDownLatch.countDown()方法),當計數器減爲0後,表示所有任務已經完成,然後再閉鎖上等待await()方法的線程就會被喚醒,繼續執行
**3.注意:**初始任務數量>=CountDownLatch.countDown()線程數,因爲一個線程可以多次countDown;調用await()等待的線程可以有多個;線程調用countDown()方法後不代表這個線程就死亡了
在這裏插入圖片描述
二、CyclicBarrier
1.循環使用的屏障。作用就是讓多個線程達到一個屏障(同步點)時阻塞,直到最後一個線程到達屏障點後,屏障纔會打開,所有線程線程解除阻塞狀態繼續運行。比如,大家一起去遊玩,定了一個聚集地點,必須等到最後一個人到達,所有人才能走。
2.主要方法
(1)CyclicBarrier(int parties)默認構造方法,參數表示等待線程數。每個線程調用await方法告訴CyclicBarrier我已經到達屏障,然後線程阻塞
(2)另外一個構造方法CyclicBarrier(int parties, Runnable barrierAction)。
barrierAction表示所有線程到達屏障後,優先執行的線程,一般用於合併各個線程數據。
在這裏插入圖片描述
三、CountDownLatch和CyclicBarrier
1.CountDownLatch的計數器不可以被重置,CyclicBarrier的計數器可以被重置
2.CountDownLatch是工作線程調用await方法阻塞,別的預備線程執行CountDownLatch.countDown方法。而CyclicBarrier是所有工作線程自行阻塞,等到大家都到後再一起執行
3.CountDownLatch可以不限線程數,就是自定義初始化加載線程數可以不等於實際執行線程數。CyclicBarrier初始化線程數必選等於執行線程數
4.CyclicBarrier提供了一個合併線程

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