并发编程原理与实战(四)经典并发协同方式synchronized与wait+notify详解
并发编程原理与实战(五)经典并发协同方式伪唤醒与加锁失效原理揭秘
并发编程原理与实战(六)详解并发协同利器CountDownLatch
并发编程原理与实战(七)详解并发协同利器CyclicBarrier
回顾下之前已经学习的CountDownLatch、CyclicBarrier、Semaphore等工具的使用场景,CountDownLatch主要用于等待多个线程完成后继续执行或者多个线程等待同时执行,不能重复使用;CyclicBarrier主要用于多个线程等待同时执行或者多个线程多次等待同时执行,可以重复使用;Semaphore主要用于控制并发访问资源的线程数量。
在多个线程同时调用接口这个场景中,如果我们要在不同的时间段分阶段压测接口,用于模拟正式环境上不同时间段的系统访问量,以便观察系统在不同时间段的资源使用情况。在这个场景中,有两个重要的特征:多阶段重复调用,每个阶段能灵活调整参与调用接口的线程数量。似乎CountDownLatch、CyclicBarrier、Semaphore这个三个工具均不能满足,此时另一个并发协同工具Phaser出现了。
多阶段并发协同工具Phaser
Phase的字面的意思是“阶段”,‘’时期‘的意思,Phaser的字面意思是“相位器”,“移相器”的意思,从字面上理解就是多阶段的相位器。Phaser是JDK1.7以后新增的灵活的多阶段并发协同相位器,可以替代CountDownLatch和CyclicBarrier,适用于更复杂的并发协同需求。它允许多个线程在多个阶段上进行协同,而不是像CountDownLatch那样只能在一个点上进行协同。下面我们来学习下Phaser相关的一些基础概念。
注册与注销
/**
* A reusable synchronization barrier, similar in functionality to
* {@link CyclicBarrier} and {@link CountDownLatch} but supporting
* more flexible usage.
*
* <p><b>Registration.</b> Unlike the case for other barriers, the
* number of parties <em>registered</

最低0.47元/天 解锁文章
638

被折叠的 条评论
为什么被折叠?



