Java 尝试等待()时倒计时闩锁引发异常
我有一个线程a运行另一个线程B。 线程A实现了一个方法“stopExec()”,该方法尝试干净地退出线程B,从而允许它完成一些任务。因此,我的stopExec方法如下所示: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
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线程代码以及“抛出异常时发生了什么事。”=>哪一行?什么例外?你需要提供更多的信息。