首页 > 解决方案 > 可复位倒计时锁存器

问题描述

我有一个想解决的问题。我有一个线程必须等待多个可变数量的异步线程完成它们的执行完成,然后,它必须执行并再次保持等待状态,直到其他线程完成它们的执行。

例子:

线程 A 一直等到线程 B 和 C 完成它们的执行。之后必须执行线程 A 并且其他线程应该等待。这是一个重复n次的循环。

ThreadA{
   public void run(){
      while(true){
         if(queue.peek() % 2 == 0){
            phaser.arriveAndAwaitAdvance();
            doStuff();
         }
      }
   }
}
ThreadB{
   public void run(){
      while(true){
          if(queue.peek() % 2 == 0){
             doStuff();
             phaser.arrive();
          }
      }
   }
}

线程 C 具有与线程 B 相同的伪代码。

我需要同步这样的东西:线程 A 必须仅在线程 B 和线程 C 执行它们的执行之后执行,并且线程 B 和线程 C 必须等待线程 A 完成其执行。

我尝试使用上面代码中提到的 Phaser 和 Phaser,但我没有得到预期的结果。

有人可以举个例子吗?

我正在使用 Java 8,并且正在寻找可重置形式的 CountDownLatch,可能使用移相器。

标签: javamultithreadingcountdownlatchphaser

解决方案


推荐阅读