我们一起聊聊并发编程:同步工具类

一、Semaphore

Semaphore也就是信号量,提供了资源数量的并发访问控制。

使用场景:大学生到自习室抢座,写作业。

二、CountDownLatch

假设一个主线程要等待5个 Worker 线程执行完才能退出,可以使用CountDownLatch来实现。

三、CyclicBarrier

该类用于协调多个线程同步执行操作的场合。

使用场景:10个工程师一起来公司应聘,招聘方式分为笔试和面试。首先,要等人到齐后,开始笔 试;笔试结束之后,再一起参加面试。

四、Exchanger

Exchanger用于线程之间交换数据。

五、Phaser

用Phaser替代CyclicBarrier和CountDownLatch。

从JDK7开始,新增了一个同步工具类Phaser,其功能比CyclicBarrier和CountDownLatch更加强大。

特性1:动态调整线程个数

CyclicBarrier 所要同步的线程个数是在构造方法中指定的,之后不能更改,而 Phaser 可以在运行 期间动态地调整要同步的线程个数。

特性2:层次Phaser

多个Phaser可以组成如下图所示的树状结构

THE END