同步器基础笔记
学习视频地址:https://www.bilibili.com/video/BV12L411n7Xn?share_source=copy_web
一、如何使用同步器 CountDownLatch
什么是CountDownLatch?
- 多个线程可以持有同一个 CountDownLatch
- 线程的任务的 run 方法中,如果调用了 CountDownLatch 的 await 方法,则会进入等待
- 等待 CountDownLatch 的计数递减为 0(调用了 countDown 方法),此时那些持有该 CountDownLatch 的线程会恢复继续执行任务。
二、如何使用 CountDownLatch 进行并行工作的收尾工作?
- 合理安排代码逻辑
- 将多个 A 类型线程同步后,执行 B 收尾工作线程
![image-20220707170514544](https://cyh11820.oss-cn-hangzhou.aliyuncs.com/noteimgs/noteimgs-master/img/202207090055581.png)
三、如何使用 CyclicBarrier
![image-20220707170659376](https://cyh11820.oss-cn-hangzhou.aliyuncs.com/noteimgs/noteimgs-master/img/202207090055582.png)
- CountDownLatch 这个同步器只能阻挡一次,即一个 task 中只能调用一次同步器的 await 方法
- CyclicBarrier 可以阻挡多次,即线程 task 中可以使用多次 await( )
使用
四、线程数据交换器 Exchanger
- 只是拷贝一份给对方,原数据还在
- 一般用来做数据校验
使用
五、Semaphore 信号量
- 是一个限流工具类
- 像是一个许可证
- 通过给线程发放许可证, 拿到许可证的线程才可以执行
常用的成员方法
使用
六、Phaser 阶段同步器(移相器)
- CyclicBarrier 的升级版
- CyclicBarrier 一旦指定了参与者数量,就不能再更改了
- Phaser 可以随时新增或减少参与同步者的数量