我想实现一个自定义的Java屏障。我不想使用CyclicBarrier class。
因此,所有线程在一个共同点见面。仅当所有线程都到达屏障时,线程才继续进行。
我想使用wait/notify/notifyAll方法来实现屏障。
这就是我想出的
public class Barrier{
private final int threadNumber;
public Barrier(int pThreadNumber){
this.threadNumber = pThreadNumber;
}
public synchronized void barrier(){
wait();
}
public synchronized void releaseBarrier(){
notifyAll();
}
public synchronized void releaseThread(){
notify();
}
}
但是我真的不明白如何在所有线程到达之前停止一定数量的线程。是否可以仅使用等待/通知/全部通知来实现障碍?
最佳答案
有点作业,所以我只给出一个提示:
您希望所有线程在threadNumber
线程正在等待时继续进行。这等效于第一个threadNumber - 1
线程等待第threadNumber
个线程到达。一种方法是计算线程数,并在第threadNumber
个线程到达后执行一些特殊的操作。