我在代码中有以下构造
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。异步回调不应该在不同的线程中吗?