2

CountDownLatchAndroidアプリで遊んでみました。現在、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コールバックは正常にヒットすることを確認しましたが、スレッドがハングします。

更新CountDownLatch0 に設定するとヒットする ことに気付きましたがonSuccess、0 より大きい値に設定するとフリーズしてonSuccess呼び出されません。スレッドで何かがおかしいようです。

4

2 に答える 2