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