Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例(三)
try {
30 Thread.sleep(1000);
31 System.out.println(Thread.currentThread().getName() + " sleep 1000ms.");
32 // 将CountDownLatch的数值减1
33 doneSignal.countDown();
34 } catch (InterruptedException e) {
35 e.printStackTrace();
36 }
37 }
38 }
39 }
复制代码
复制代码
main await begin.
Thread-0 sleep 1000ms.
Thread-2 sleep 1000ms.
Thread-1 sleep 1000ms.
Thread-4 sleep 1000ms.
Thread-3 sleep 1000ms.
main await finished.
复制代码
结果说明:主线程通过doneSignal.await()等待其它线程将doneSignal递减至0。其它的5个InnerThread线程,每一个都通过doneSignal.countDown()将doneSignal的值减1;当doneSignal为0时,main被唤醒后继续执行。