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

参考链接

相关文章:

  • 2021-10-27
  • 2021-12-24
  • 2021-06-23
  • 2021-06-07
  • 2022-01-28
  • 2021-05-11
猜你喜欢
  • 2022-01-10
  • 2021-07-11
  • 2021-10-22
  • 2021-07-14
  • 2021-10-09
  • 2022-12-23
  • 2021-08-07
相关资源
相似解决方案