尝试await()时CountDownLatch抛出异常

时间:2013-01-10 10:46:34

标签: java multithreading countdownlatch

我有一个运行另一个线程B的线程A. 线程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,它按预期工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

此代码已损坏:它包含lock变量上的数据争用。尝试制作lock变量volatile

,尝试解决您的问题