实现自定义java屏障

时间:2011-07-06 17:05:53

标签: java concurrency

我想实现自定义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来实现屏障?

2 个答案:

答案 0 :(得分:3)

一些家庭作业,所以我只是提示:

threadNumber个线程在等待时,您希望所有线程继续运行。这相当于等待第threadNumber - 1个线程到达的第一个threadNumber线程。一种方法是计算线程数,并在第threadNumber个线程到达时执行一些特殊操作。

答案 1 :(得分:0)

与Java详细信息相关的其他提示:在wait()上被阻止的线程可以被虚假唤醒;请参阅Object.wait() javadocs

为了容忍虚假唤醒,你需要有一个while循环,其中简单逻辑只需要if检查或盲目wait()