我刚开始在我的Android应用程序中尝试使用CountDownLatch
。目前,我正在尝试向我的API发出两个Volley
请求,并等待数据被检索和存储后再继续线程执行。
这是我的代码示例:
// new CountDownLatch for 2 requests
final CountDownLatch allDoneSignal = new CountDownLatch(2);
transactions.getResourcesForRealm(Contact.class, "", new ICallBack<Contact>() {
@Override
public void onSuccess(ArrayList<Contact> resources, String resourceId) {
transactions.createRealmObject(resources, Contact.class);
allDoneSignal.countDown();
}
@Override
public void onFail(ArrayList<Contact> resources) {
}
});
transactions.getResourcesForRealm(Meeting.class, "", new ICallBack<Meeting>() {
@Override
public void onSuccess(ArrayList<Meeting> resources, String resourceId) {
transactions.createRealmObject(resources, Meeting.class);
allDoneSignal.countDown();
}
@Override
public void onFail(ArrayList<Meeting> resources) {
}
});
try {
allDoneSignal.await();
// continue executing code
// ...
} catch (InterruptedException e) {
e.printStackTrace();
}
问题在于它似乎无法“完成”倒计时,因此会冻结,因为闩锁从未被释放。我已确认API请求正在工作,并且onSuccess回调成功触发,但线程却挂起。
更新:我刚刚注意到,当CountDownLatch设置为0时,它会触发onSuccess,但当我将其设置为大于0的任何值时,它会冻结,并且onSuccess永远不会被调用。看起来线程有些问题。
Log.wtf
记录这个... - barnacle.mallDoneSignal
变量在三个地方是否相同(如果代码完全像你在单个方法中发布的那样,那显然是相同的)... - assylias