我有一个运行另一个线程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,它按预期工作。
谢谢!
答案 0 :(得分:0)
lock = new CountDownLatch(1);
threadB.finish();
此代码已损坏:它包含lock
变量上的数据争用。尝试制作lock
变量volatile
。