CountDownLatch.await()挂起后台线程

时间:2017-09-27 20:07:44

标签: java android service java-threads countdownlatch

我正在开发一个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()?

暂停的主线程上工作

1 个答案:

答案 0 :(得分:0)

闩锁倒计时的位置并不明显。但它听起来像在uploadMedia()期间发生。如果是这样,你的主线程在latch.await()变得陈旧,因为没有其他控制流可以将锁存器计数到零。