Count down英文释义倒计数,latch为门闩;顾名思义,所以这个类在java中就会用在所有线程都执行完毕之后在执行其他操作的场景,比如说火箭发射等;
CountDownLatch的构造函数接受一个整数作为参数,即这个计数器的个数;且看下面CountDownLatch代码:
package cn.yan.current;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestCountDownLatch implements Runnable {
static final CountDownLatch latch = new CountDownLatch(10);
static final TestCountDownLatch test = new TestCountDownLatch();
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(10) * 1000);
System.out.println("是否完成");
latch.countDown();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
executorService.submit(test);
}
// 等待检查
latch.await();
System.out.println("全部完成, go");
// 执行完成之后关闭线程池
executorService.shutdown();
}
}
其执行结果为:
/usr/jdk-9.0.1/bin/java -javaagent:/home/shuai/software/idea-IU-173.3727.127/lib/idea_rt.jar=44325:/home/shuai/software/idea-IU-173.3727.127/bin -Dfile.encoding=UTF-8 -classpath /home/shuai/IdeaProjects/cn-netty/out/production/classes cn.yan.current.TestCountDownLatch
是否完成
是否完成
是否完成
是否完成
是否完成
是否完成
是否完成
是否完成
是否完成
是否完成
全部完成, go
Process finished with exit code 0