CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。它本质上是AQS的上层实现的共享锁。如果同时开启多个线程执行任务,必须等到所有的线程都执行完再执行主线程,这个时候就需要用到CountDwonLatch来控制了。先上代码,更好理解:
示例
public static void main(String[] args) { //减法计数器,用来判断全部线程是否全部执行完成。设置10表示等待10个线程全部执行完成。 CountDownLatch count = new CountDownLatch(10); for (int i=1;i<=10;i++){ new Thread(()->{ System.out.println(Thread.currentThread().getName() + "出去了"); count.countDown();// -1 },String.valueOf(i)).start(); } //主线程等待子线程全部执行完毕才继续执行 try { count.await();//等待计数器归零(等待计数器计数完成) } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("关门了"); }