当前位置: 代码迷 >> 综合 >> 线程十九:Phaser
  详细解决方案

线程十九:Phaser

热度:69   发布时间:2023-09-29 04:28:06.0

Phaser构建了一个更加灵活的同步屏障,和前面文章中提到的CountDownLatch与CyclicBarrier屏障器一样,Phaser也能使得一组线程在屏障上等待,在最后一条线程到达之后,这些线程就能继续执行了。Phaser的灵活在于它可以协调不定数目的线程,线程可以在任何时刻加入。

为了达到灵活性的目的,Phaser定义了表达状态的phase值,phase的初始值是0,当线程都到达指定的屏障点时,它的值就会自动加1.我们可以灵活使用这个值来做多个线程的分阶段任务的交互。在实际编程的时候我们通常会重写一个方法:onAdvance(int phase,int registeredParties),当phase值发生变化时这个方法会自动调用,当它返回true时,Phaser就结束了。

为了演示Phaser的灵活应用,我们模拟一个多阶段屏障点的程序,假设有3个工程师同时来公司面试,面试一共有2轮,分别是笔试和面试,只有他们都到齐了才能开始笔试,只有笔试都结束了才能开始面试。我们看一下这个实例的实现代码:

线程十九:Phaser

线程十九:Phaser

线程十九:Phaser

线程十九:Phaser

参考链接