0

我有一个线程 A 运行另一个线程 B。线程 A 实现了一个方法“stopExec()”,它试图干净地退出线程 B - 允许它完成一些任务。所以我的 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 回答