有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CountDownLatch在尝试等待()时引发异常

我有一个线程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不等待,只是继续。 谁能解释一下我为什么做错了。 在其他情况下,我也以类似的方式使用了Countdownlock,它的工作原理与预期一致

谢谢!


共 (1) 个答案

  1. # 1 楼答案

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

    这段代码被破坏了:它在lock变量上包含一个数据竞争。尝试通过使lock变量volatile来解决问题