java会因为多线程而覆盖代码中的DataSnapshot吗
这里有一些圣诞夜多线程…:)
因为FireBase ChildEventListener
onChildAdded()
会连续地为每个条目调用,所以我代码中的DataSnapshot会被覆盖吗,就像我的线程在尚未完成时启动,并且新的onChildAdded()
调用即将到来一样,DataSnapshot会在我的线程内更改吗
ChildEventListener userHistoryAddressChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(final DataSnapshot snapshot, String prevKey) {
new Thread(new Runnable() {
@Override
public void run() {
// get toy history for current user
UserHistory.ToyHistory toyHistory = snapshot.getValue(UserHistory.ToyHistory.class);
ToyManager.getInstance().addToyHistory(
mFireBaseAuth.getCurrentUser().getUid(),
toyHistory.getToy(),
toyHistory.getTime(),
toyHistory.getColor(),
toyHistory.getHistoryId());
}
}).start();
}
# 1 楼答案
对onChildAdded的每个调用都将有自己的不可变DataSnapshot实例传递给它
我强烈建议不要为每个孩子开始这样的新线程。这很容易使运行它的设备或计算机无法承受。如果需要阻止回调并进入另一个线程,请考虑使用一个Executor,它可以在一个适合系统和您的toyMeor的线程池中排队执行,这样我们就看不到它是如何实现的。p>