我想实现自定义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();
}
}
但我真的不明白如何实现在所有线程到达之前停止一定数量的线程。是否可以仅使用wait / notify / notify all来实现屏障?
答案 0 :(得分:3)
一些家庭作业,所以我只是提示:
当threadNumber
个线程在等待时,您希望所有线程继续运行。这相当于等待第threadNumber - 1
个线程到达的第一个threadNumber
线程。一种方法是计算线程数,并在第threadNumber
个线程到达时执行一些特殊操作。
答案 1 :(得分:0)
与Java详细信息相关的其他提示:在wait()
上被阻止的线程可以被虚假唤醒;请参阅Object.wait() javadocs。
为了容忍虚假唤醒,你需要有一个while
循环,其中简单逻辑只需要if
检查或盲目wait()
。