jdk 基于 8 版本
在平时的开发中,我们经常会用到 CountDownLatch
, 它是用于线程通信的工具类。
常用使用场景就是,主线程等待子线程操作完成,然后继续执行。
使用方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class CountDownLatchTest {
@Test
@SneakyThrows
void test() {
CountDownLatch countDownLatch = new CountDownLatch(1);
System.out.println(Thread.currentThread() + ": 1");
new Thread(() -> {
System.out.println(Thread.currentThread() + ": 2");
countDownLatch.countDown();
}).start();
System.out.println(Thread.currentThread() + ": 3");
countDownLatch.await();
System.out.println(Thread.currentThread() + ": 4");
}
}
|
执行结果:
1
2
3
4
| Thread[main,5,main]: 1
Thread[main,5,main]: 3
Thread[Thread-1,5,main]: 2
Thread[main,5,main]: 4
|
await
线程等待。一般是主线程来调用。
countDown
计数减一。一般是子线程调用。
当计数为0时,主线程就会被唤醒,继续执行代码。