线程中的 一个计数器,可以指定必须 减到0的时候,才开始下面的线程 废话不多说,直接上代码

一、没有用CountDownLatch

  1. // 必须等上自习的同学全部离开后,班长才能关门
  2. public class CountDownLatchDemo {
  3. public static void main(String[] args) {
  4. for (int i = 0; i < 6; i++) {
  5. new Thread(()->{
  6. System.out.println(Thread.currentThread().getName()+"\t上完自习,离开教室");
  7. }).start();
  8. }
  9. System.out.println(Thread.currentThread().getName()+"-----班长最后关门走人");
  10. }
  11. }

结果如下,main线程并没有等到最后才执行。

  1. Thread-0 上完自习,离开教室
  2. Thread-2 上完自习,离开教室
  3. Thread-1 上完自习,离开教室
  4. Thread-3 上完自习,离开教室
  5. main-----班长最后关门走人
  6. Thread-4 上完自习,离开教室
  7. Thread-5 上完自习,离开教室

二、用了CountDownLatch

完美实现

  1. public class CountDownLatchDemo {
  2. public static void main(String[] args) throws InterruptedException {
  3. CountDownLatch countDownLatch = new CountDownLatch(6);
  4. for (int i = 0; i < 6; i++) {
  5. new Thread(()->{
  6. System.out.println(Thread.currentThread().getName()+"\t上完自习,离开教室");
  7. countDownLatch.countDown();
  8. }).start();
  9. }
  10. // 等countDownLatch到0,才执行
  11. countDownLatch.await();
  12. System.out.println(Thread.currentThread().getName()+"-----班长最后关门走人");
  13. }
  14. }

结果

  1. Thread-0 上完自习,离开教室
  2. Thread-2 上完自习,离开教室
  3. Thread-1 上完自习,离开教室
  4. Thread-4 上完自习,离开教室
  5. Thread-3 上完自习,离开教室
  6. Thread-5 上完自习,离开教室
  7. main-----班长最后关门走人