有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java会因为多线程而覆盖代码中的DataSnapshot吗

这里有一些圣诞夜多线程…:)
因为FireBase ChildEventListeneronChildAdded()会连续地为每个条目调用,所以我代码中的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) 个答案

  1. # 1 楼答案

    对onChildAdded的每个调用都将有自己的不可变DataSnapshot实例传递给它

    我强烈建议不要为每个孩子开始这样的新线程。这很容易使运行它的设备或计算机无法承受。如果需要阻止回调并进入另一个线程,请考虑使用一个Executor,它可以在一个适合系统和您的toyMeor的线程池中排队执行,这样我们就看不到它是如何实现的。p>