CountDownLatch
CountDownLatch
CountDownLatch 需要一个线程等待所有线程执行完后,它再执行,这样的场景我们可以使用它。
有两个方法
countDownLatch.countDown();将count--;
countDownLatch.await();阻塞当前线程,直到count为0;
/*
秦灭六国, 秦统一华夏
*/
public class juc3 {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(6);
for (int i = 1; i <= 6; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"被消灭");
countDownLatch.countDown();
},CountryEnum.getCountry(i).getRetMsg()).start(); //有可能传入的 i 不存在 有空指针风险
}
countDownLatch.await();
System.out.println(Thread.currentThread().getName()+"秦朝一统天下~~~");
}
}
---------------------------------------------------------------------------------------------------------------------
/*
写个枚举类
*/
public enum CountryEnum{
one(1,"赵"),
two(2,"齐"),
three(3,"楚"),
four(4,"燕"),
five(5,"魏"),
six(6,"韩")
;
private Integer retCode;
private String retMsg;
public Integer getRetCode() {
return retCode;
}
public String getRetMsg() {
return retMsg;
}
CountryEnum(Integer retCode, String retMsg) {
this.retCode = retCode;
this.retMsg = retMsg;
}
public static CountryEnum getCountry(int retCode){
//枚举类 有一个 values() 方法可以遍历所有枚举
CountryEnum[] values = CountryEnum.values();
for (CountryEnum value : values) {
if (retCode == value.retCode){
return value;
}
}
return null;
}
} 使用枚举类原因?
假设我们需要灭的不是6国,而是成百上千的国家,那我们怎么样实现 每次的 i 与国家名对应呢?
使用 switch case可以解决,但是没来一个线程就比较所有的条件,这显然很浪费时间效率。
再者,当我们需要灭的国家更改的时候,那我们还需要改这个代码。
如果,我们使用枚举类来实现这个 遍历的 i 与国家名称的记录的话,是不是会方便很多?(枚举类可以看成是一
