一、Semaphore
Semaphore也就是信号量,提供了资源数量的并发访问控制。
使用场景:大学生到自习室抢座,写作业。
二、CountDownLatch
假设一个主线程要等待5个 Worker 线程执行完才能退出,可以使用CountDownLatch来实现。
三、CyclicBarrier
该类用于协调多个线程同步执行操作的场合。
使用场景:10个工程师一起来公司应聘,招聘方式分为笔试和面试。首先,要等人到齐后,开始笔 试;笔试结束之后,再一起参加面试。
四、Exchanger
Exchanger用于线程之间交换数据。
五、Phaser
用Phaser替代CyclicBarrier和CountDownLatch。
从JDK7开始,新增了一个同步工具类Phaser,其功能比CyclicBarrier和CountDownLatch更加强大。
特性1:动态调整线程个数
CyclicBarrier 所要同步的线程个数是在构造方法中指定的,之后不能更改,而 Phaser 可以在运行 期间动态地调整要同步的线程个数。
特性2:层次Phaser
多个Phaser可以组成如下图所示的树状结构