CountDownLatch容许一个或多个线程一直等待,直到其余线程的操做执行完后再执行;CountDownLatch是经过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了本身的任务后,计数器的值就会减1。当计数器值到达0时,它表示全部的线程已经完成了任务,而后在闭锁上等待的线程就能够恢复执行任务。ide
public class CountDownLatchDemo { static CountDownLatch countDownLatch=new CountDownLatch(3); public static class task implements Runnable{ @Override public void run() { try { Thread.sleep(1000);//模拟耗时 System.out.println(Thread.currentThread().getName()+"准备完成"); countDownLatch.countDown();//表示该任务已完成,计数器减一 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { ExecutorService executorService= Executors.newFixedThreadPool(3); for(int i=0;i<3;i++){ executorService.submit(new task()); } try { countDownLatch.await();//等待子线程都完成才能执行 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("火箭发射"); } } 执行结果以下 pool-1-thread-3准备完成 pool-1-thread-1准备完成 pool-1-thread-2准备完成 火箭发射
解析:模拟火箭发射,必须等三个线程跑完才能执行主线程;线程