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()方法的,以及它是如何触发的