并发-Java编排线程工具(计数器、栅栏、相位器)

CountDownLatch计数器

countDown()计数器减一,减到0之后唤醒被await方法阻塞的线程

await()阻塞线程,等待计数器到达0

CyclicBarrier栅栏

一般只使用await方法,相当于CountDownLatch中的countDown&&await方法

栅栏可以循环使用

相比CountDownLatch,栅栏调用await的主体不一样,CountDownLatch一般在主线程调用await方法,栅栏一般在线程中调用

phaser相位器(翻译为:阶段)

主要看两个属性:

phaser阶段:

parties总数:

​ 1.到达数

​ 2.未到达数

Phaser phaser = new Phaser(parties : 5);

arrive方法:到达数+1,未到达数-1,未到达数==0?phaser+1:null

总数为0时,phaser不会+1,因为没有意义,会置为INT_MIN

register方法:未到达数+1

bulkRegister方法,传入参数,把未到达数加上参数

arriveAndDeregister方法:未到达数-1

phaser.awaitAdvance(0):等第0阶段完成之后进行下面代码运行,注意必须身处第0阶段,才能等待第0阶段结束,可以配合phaser.getPhaser()方法使用

如果传入的阶段数是负数,则不会阻塞,直接return

你可能感兴趣的:(并发-Java编排线程工具(计数器、栅栏、相位器))