9

ドキュメントには、次のCountDownLatchようなものがあります。

public void run() {
      試す {
        startSignal.await();
        仕事する();
        doneSignal.countDown();
      } catch (InterruptedException ex) {} // return;
}

startSignaldoneSignalはオブジェクトCountDownLatchです。

ドキュメントには、クラスがスレッドセーフであるかどうかについては何も言及されていません。

4

2 に答える 2

7

複数のスレッドで使用するように設計されているため、スレッドセーフのほとんどの意味に対してスレッドセーフであると想定するのは公平です。

発生する前のコミットメントもあります(リンクから):

メモリー一貫性効果: カウントがゼロになるまで、countDown() を呼び出す前のスレッド内のアクションは、別のスレッド内の対応する await() から正常に返された後のアクションの前に発生します。

特定の質問を参照して、2 つのスレッドが同時に countDown を呼び出すとどうなりますか? カウントダウンアクションを1回だけ効果的に行うだけではありませんか?いいえ、countDown毎回 2 つの s が実行されます。

于 2015-05-06T11:05:26.897 に答える