CountDownLatch
Androidアプリで遊んでみました。現在、API に対して 2 つのリクエストを作成しようとし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
呼び出されません。スレッドで何かがおかしいようです。