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