1

我在代码中有以下构造

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 似乎阻塞了整个线程并且不让异步回调发生。我尝试将event.addListener()...零件包装在 a 中,Runnable但问题仍然存在。

我在代码的另一部分有完全相同的结构,并且它在那里工作。

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

4

0 回答 0