CountDownLatch,同步辅助类
public class CountDownLatchextends Object一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。
- 假設定義一個計數器為 5。
- 每個線程完成任務后計數減1
- 計數器減為 0 則通知等待的線程。
用給定的計數 初始化 CountDownLatch。由于調用了 countDown() 方法,所以在當前計數到達零之前,await 方法會一直受阻塞。之后,會釋放所有等待的線程,await 的所有后續調用都將立即返回。這種現象只出現一次——計數無法被重置。如果需要重置計數,請考慮使用 CyclicBarrier。
CountDownLatch 是一個通用同步工具,它有很多用途。將計數 1 初始化的 CountDownLatch 用作一個簡單的開/關鎖存器,或入口:在通過調用 countDown() 的線程打開入口前,所有調用 await 的線程都一直在入口處等待。用 N 初始化的 CountDownLatch 可以使一個線程在 N 個線程完成某項操作之前一直等待,或者使其在某項操作完成 N 次之前一直等待。
CountDownLatch 的一個有用特性是,它不要求調用 countDown 方法的線程等到計數到達零時才繼續,而在所有線程都能通過之前,它只是阻止任何線程繼續通過一個 await。
根據API原話寫個小Demo
public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(5);for (int i = 1; i <= 5; i++){new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t上完自習,離開教室");countDownLatch.countDown();},String.valueOf(i)).start();}countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t***********班長最后關燈鎖門!!");} }執行結果
下面加上枚舉,順便學習下枚舉
java枚舉可以看做成一張數據庫的表,每一個()就是一行數據,()中每個元素就是表的字段
然后寫get方法和構造方法
總結
以上是生活随笔為你收集整理的CountDownLatch,同步辅助类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive或mysql报错Too many
- 下一篇: 数据结构 - 链表(双向链表学习)