1. CountDownLatch
1.1 简介
CountDownLatch是一个同步工具类,允许一个或多个线程等待其他线程操作完成后才执行,比如生活中炒菜的例子,要炒菜之前,得准备好油盐酱醋,切好菜,准备好工具,等待这些工作做完了,才可以真的炒菜,用线程方式表示就是
线程A : 炒菜
线程B : 酱料准备
线程C : 切菜
线程D : 工具
当线程B,C,D操作完成,线程A才会执行,CountDownLatch就是实现这种需求的工具类。
1.2 使用代码
|
|
2. 实现简单CountDownLatch
2.1 思路
使用Condition的await方法实现线程等待,使用Condition的signal方法实现唤醒
countDown()
- count计数减一
- 当count为0时,使用Condition实例的signal方法来唤醒最终线程
await()
使用Condition实例的await方法
注意点
- Condition实例方法得配合ReentrantLock来使用
- 使用Condition的await和signal之前,都得使用ReentrantLock获得锁,就像Object.wait()使用前得获取对象锁一样,也就是获取监视器
| 方法 | 监视器 |
| —- | — |
| Object.wait() Object.notify() | Monitor |
| await() signal() | ReentrantLock.lock() |
2.2 代码
|
|