作用:直译:倒数的门闩,倒数指定的次数,await才继续往下执行。
import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchDemo implements Runnable{ //创建CountDownLatch,并指定倒计数值为10 static final CountDownLatch latch = new CountDownLatch(10); static final CountDownLatchDemo demo = new CountDownLatchDemo(); @Override public void run() { // 模拟检查任务 try { Thread.sleep(new Random().nextInt(10) * 1000); System.out.println("check complete"); } catch (InterruptedException e) { e.printStackTrace(); } finally { //计数减一 //放在finally避免任务执行过程出现异常,导致countDown()不能被执行 latch.countDown();//让计数键1 } } public static void main(String[] args) throws InterruptedException { ExecutorService exec = Executors.newFixedThreadPool(10); for (int i=0; i<10; i++){ exec.execute(demo); } // 等待检查 latch.await();//该方法为阻塞方法,在countDown结束之前,当前线程会阻塞在此等待在countDown结束 // 发射火箭 System.out.println("Fire!"); // 关闭线程池 exec.shutdown(); } }