我想实现一个自定义的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个线程到达后执行一些特殊的操作。

10-06 12:21