我正在开发一个Android应用程序,它在某些时候运行服务。该服务为耗时的操作运行新线程,并等待countDownLatch为零。之后,它运行第二个线程进行另一个耗时的操作(现在不需要新线程,但将在不久的将来)。
现在......在启动downloadThread之后,如果我按照下面所示进行等待,主线程和downloadThread挂起操作。但是,如果我在uploadThread中等待countDownLatch,一切正常。
Thread downloadThread = new Thread(new Runnable() {
@Override
public void run() {
downloadFiles(mMediaFileList);
}
});
downloadThread.start();
try {
Log.d("UploadMedia", "Waiting for DownloadMedia to finish");
mCountDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread uploadThread = new Thread(new Runnable() {
@Override
public void run() {
uploadMedia();
}
});
uploadThread.start();
这不是一个真正的问题但它不应该双向工作吗?是否有关于.await()功能的遗漏?
干杯!
编辑:仅供参考,downloadFiles具有等待任务完成或失败的回调。这些回调是否可以在.await()?
暂停的主线程上工作答案 0 :(得分:0)
闩锁倒计时的位置并不明显。但它听起来像在uploadMedia()期间发生。如果是这样,你的主线程在latch.await()
变得陈旧,因为没有其他控制流可以将锁存器计数到零。