0

別のスレッド B を実行するスレッド A があります。スレッド A は、スレッド B をきれいに終了しようとするメソッド「stopExec()」を実装し、いくつかのタスクを終了できるようにします。したがって、私の stopExec メソッドは次のようになります。

private CountDownLatch lock;

public void stopExec() {
  lock = new CountDownLatch(1);
  threadB.finish();
  try {
    lock.await();
  } catch(InterruptedExcetion ie) {
    Log.d(null, "Thread A not locked.");
  }
  Log.d(null, "Finished.");
}

スレッド B にはスレッド A への参照があり、「threadA.lock.countDown();」を呼び出します。それが何をしていたとしても終わったとき。

例外がスローされるとどうなりますか...スレッドAは待機せず、単に続行します。誰かが私になぜ/何が間違っているのか説明してもらえますか. 他のケースでも同様の方法で CountDownLatch を使用しましたが、期待どおりに機能しています。

ありがとうございました!

4

1 に答える 1

0
lock = new CountDownLatch(1);
threadB.finish();

このコードは壊れています:lock変数にデータ競合が含まれています。lock変数を作成して問題を解決してみてくださいvolatile

于 2013-01-10T11:32:35.813 に答える