Java 倒数锁存器阻塞异步回调

Java 倒数锁存器阻塞异步回调,java,android,asynchronous,countdownlatch,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 dataSnapsh

我在代码中有以下构造

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;
}
发生的情况是,
倒计时闩锁
等待1分钟,然后侦听器触发。但由于闩锁已倒计时,因此始终返回
false
。在我看来,闩锁似乎阻塞了整个线程,而不允许异步回调发生。 我已尝试将
事件.addListener()…
部分包装在
可运行的
中,但问题仍然存在

我在代码的另一部分中使用了完全相同的构造,它在那里工作

编辑:
我已经为
Thread.currentThread().getId()
放了日志,事实上,它的计算结果是相同的Id。异步回调不应该在不同的线程中吗?

我们是否同意您假设在1分钟内调用onDataChange方法是正确的?如果是这样的话,您能在日志文件中看到它吗?是的,我希望在1分钟内调用onDataChange方法。分钟过后,我可以在日志文件中看到呼叫。在我编辑之后,我相信这与线程有关,但我觉得这看起来很奇怪。我相信你应该提供更多的代码,让我们知道你是如何调用do()方法的,以及它是如何触发的。我们同意你假设在1分钟内你希望调用onDataChange方法,对吗?如果是这样的话,您能在日志文件中看到它吗?是的,我希望在1分钟内调用onDataChange方法。分钟过后,我可以在日志文件中看到呼叫。在我编辑之后,我相信它与线程有关,但这在我看来很奇怪。我相信你应该提供更多的代码,让我们知道你是如何调用do()方法的,以及它是如何触发的