“网站建设:上海珍岛”,定制网站建设公司电话,网站后台建设,wordpress更新服务pingpublic class CountDownLatchextends Object一个同步辅助类#xff0c;在完成一组正在其他线程中执行的操作之前#xff0c;它允许一个或多个线程一直等待。
假设定义一个计数器为 5。每个线程完成任务后计数减1计数器减为 0 则通知等待的线程。
用给定的计数 初始化 Count…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; //找不到}
}