我需要在多个线程上进行同步。我没有创建线程,但是我知道有多少个线程。所以我写了这个内部防护块:

private class Guard {
    int waiters = 0;
    boolean wait;
    synchronized void addWaiter() {
        ++waiters;
        wait = true;
        while (wait && waiters != threadNum()) {
            try {
                wait();
            } catch (InterruptedException e) {}
        }
        waiters = 0;
        wait = false;
        notifyAll();
    }
}


该受保护的块在循环中执行。因此,问题在于,第一次调用中的所有线程都可能从wait()循环释放之前,可能第二次被调用,这显然会破坏保护程序的整个逻辑。因此,在从保护程序中释放线程之前,我需要使它们以某种方式加入。有这个设计吗?什么是完成它的最优雅的方法。请记住,这些线程不是我创建的。

谢谢。

最佳答案

听起来像CountDownLatch的工作。您可以将闩锁设置为等待N个倒计时。有关示例,请参见Javadoc。

关于java - 带联接的守卫方块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4580118/

10-10 00:34