日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CountDownLatch,同步辅助类

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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方法和構造方法

package JUC;import lombok.Getter;import java.util.concurrent.CountDownLatch;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();},CountryEnum.forEach_CountryEnum(i).getReMessage()).start();}countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t***********秦國,一統華夏!!");//System.out.println(CountryEnum.SIX);//System.out.println(CountryEnum.TWO.getReMessage());//System.out.println(CountryEnum.FOUR.getReCode());} }enum CountryEnum {ONE(1,"楚"),TWO(2,"燕"),THREE(3,"韓"),FOUR(4,"趙"),FIVE(5,"魏"),SIX(6,"齊");@Getter private Integer reCode; //用@Getter就不需要寫get方法了,但是需要引入import lombok.Getter;沒下載過需要maven下載包,或者直接寫下面的get方法@Getter private String reMessage;public Integer getReCode() {return reCode;}public String getReMessage() {return reMessage;}CountryEnum(Integer reCode, String reMessage) {this.reCode = reCode;this.reMessage = reMessage;}public static CountryEnum forEach_CountryEnum(int index){CountryEnum[] values = CountryEnum.values();for (CountryEnum element : values) {if (element.reCode == index){return element; //找到}}return null; //找不到} }

總結

以上是生活随笔為你收集整理的CountDownLatch,同步辅助类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。