我有一个用Java编写的服务器,它可以在收听,处理和更新Firebase数据时收到关闭信号.由于Firebase线程是Java中的守护程序线程,因此我想在主线程中添加一些延迟以允许完成写入操作.
我目前的想法是锁存方法:使用一些并发计数器来跟踪挂起的写操作,并让主线程在没有时退出.计数器会在onComplete()
回调中更新,所以我想知道:
在Firebase客户端中,何时可能onComplete()
无法调用回调?僵局有合理的危险吗?
摘自谷歌小组讨论.这使用布尔值done
(在这种情况下为线程安全操作的AtomicBoolean)和while
循环.
import com.firebase.client.Firebase; import com.firebase.client.FirebaseError; import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; public class Demo { public static void main(String[] args) { final AtomicBoolean done = new AtomicBoolean(false); Firebase ref = new Firebase("https://testjava.firebaseio-demo.com/"); ref.setValue(new Date().toString(), new Firebase.CompletionListener() { @Override public void onComplete(FirebaseError firebaseError, Firebase firebase) { done.set(true); } }); while (!done.get()); } }