JUC - CountDownLatch
让一些线程阻塞直到另一个线程完成一系列操作之后才被唤醒。
CountDownLatch countDownLatch = new CountDownLatch(SIX);
当一个或多个线程调用 countDownLatch.await(); 方法时,调用线程会被阻塞。其他线程调用 countDownLatch.countDown(); 方法会将计数器 减一(调用countDown(); 方法的线程不会阻塞)当计数器的值变为零时,因调用 await 方法被阻塞的线程会被唤醒,继续执行。
- CountDownLatch 的基本使用
- 巧妙运用枚举,可以避免大量的if/else判断
- 下拉框等都可以使用枚举,以减少数据库连接
- 可以把枚举当做一个简单的数据库来使用
package com.test.mianshi;
import lombok.Getter;
import java.util.concurrent.CountDownLatch;
/**
* CountDownLatch 的基本使用
* 巧妙运用枚举,可以避免大量的if/else判断
* 下拉框等都可以使用枚举,以减少数据库连接
* 可以把枚举当做一个简单的数据库来使用
*/
public class CountDownLatchDemo {
private static final Integer SIX = 6;
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(SIX);
for (int i = 1; i <= 6; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "国,被灭。 ");
countDownLatch.countDown();
}, CountryEnum.getRetMessageBy(i)).start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println();
System.out.println("---->>>>>>>> 秦统一六国。。。");
}
}
enum CountryEnum {
ONE(1, "燕"),
TWO(2, "赵"),
THREE(3, "韩"),
FOUR(4, "魏"),
FIVE(5, "吴"),
SIX(6, "楚");
@Getter
private Integer retCode;
@Getter
private String retMessage;
CountryEnum(Integer retCode, String retMessage) {
this.retCode = retCode;
this.retMessage = retMessage;
}
public static String getRetMessageBy(Integer index) {
for (CountryEnum countryEnum : CountryEnum.values()) {
if (countryEnum.getRetCode().equals(index)) {
return countryEnum.getRetMessage();
}
}
return null;
}
}
控制台打印结果:
赵国,被灭。
燕国,被灭。
韩国,被灭。
魏国,被灭。
楚国,被灭。
吴国,被灭。
---->>>>>>>> 秦统一六国。。。