0

複数のスレッドで同期する必要があります。スレッドは作成しませんが、いくつあるかはわかります。だから私はこの内側のガードされたブロックを書きました:

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()ループから解放される前に、2回目に呼び出される可能性があることです。これにより、ガードのロジック全体が明らかに台無しになります。したがって、ガードから解放される前に、スレッドを何らかの方法で結合させる必要があります。このためのデザインはありますか?それを達成するための最もエレガントな方法は何ですか。スレッドは私が作成したものではないことに注意してください。

ありがとう。

4

1 に答える 1

4

CountDownLatchの仕事のように聞こえます。Nカウントダウンを待機するようにラッチを設定できます。例については、Javadocを参照してください。

于 2011-01-02T19:43:53.717 に答える