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 楼答案
这段代码被破坏了:它在
lock
变量上包含一个数据竞争。尝试通过使lock
变量volatile
来解决问题