CountDownLatch阻止异步回调

时间:2016-05-06 11:55:44

标签: java android asynchronous countdownlatch

我在代码中有以下构造

public boolean do(){
    final boolean[] returnValue = new boolean[1];
    final CountDownLatch cdl = new CountDownLatch(1);

    event.addListener(new Listener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onDataChange");
            returnValue[0] = true;
            cdl.countDown();
        }
    });


    try {
        if (cdl.await(1L, TimeUnit.MINUTES)) { 
            return returnValue[0];
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return false;
}

如果CountDownLatch等待1分钟然后监听器触发,会发生什么。但由于闩锁已经倒计时false总是返回。对我而言,似乎Latch阻止整个线程并且不让Async Callback发生。 我已尝试将event.addListener()...部分包裹在Runnable中,但问题仍然存在。

我在我的代码的另一部分中有完全相同的构造,并且它可以工作。

编辑: 我已经为Thread.currentThread().getId()添加了日志,事实上它确实评估了相同的Id。难道不能将异步回调放在不同的线程中吗?

0 个答案:

没有答案