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