Java 尝试等待()时倒计时闩锁引发异常

Java 尝试等待()时倒计时闩锁引发异常,java,multithreading,countdownlatch,Java,Multithreading,Countdownlatch,我有一个线程a运行另一个线程B。 线程A实现了一个方法“stopExec()”,该方法尝试干净地退出线程B,从而允许它完成一些任务。因此,我的stopExec方法如下所示: private CountDownLatch lock; public void stopExec() { lock = new CountDownLatch(1); threadB.finish(); try { lock.await(); } catch(InterruptedExcetion

我有一个线程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,它的工作方式与预期的一样

谢谢大家!

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

此代码已断开:它包含
lock
变量上的数据竞争。尝试通过使
变量
易失性

来解决您的问题。我删除了标记
android
-这个问题不是关于androidshow线程代码以及“抛出异常时发生了什么事。”=>哪一行?什么例外?你需要提供更多的信息。