2017-03-12 54 views
-1

我有幾個數據偵聽器,它們可能會同時接收大致的數據集。他們將使用其方法add()迭代數據集並將數據存儲到相同的ArrayList。這可能會導致一些數據項目未被存儲的任何問題?同時從幾種方法寫入同一個ArrayList

+0

這些都在同一個線程?你是否刪除任何物品? – Unlocked

+0

這一切都在Javadoc。 ['ArrayList''不同步。如果多個線程同時訪問一個ArrayList實例,並且至少有一個線程在結構上修改了這個列表,那麼它必須在外部進行同步。](https://docs.oracle.com/javase/8/docs/api/的java/UTIL/ArrayList.html)。 – EJP

+0

這些是從幾個Firebase結果偵聽器更新的 - 我不確定它們是在UI還是單獨的線程上運行。不刪除任何項目。只是想加入結果,我通過使用幾種不同的過濾器。 – wilkas

回答

0

您可以在此情況下,使用synchronized塊:

synchronized (this){ 
    // ... 
} 

你可以在這裏找到一個很好的例子Synchronized

+0

任何類似的英文資源? – wilkas

2

ArrayList是不同步的。從docs

請注意,此實現不同步。如果多個線程 同時訪問ArrayList實例,並且線程中至少有一個線程修改了列表的結構,它必須必須外部同步 。 (結構上的修改是指添加或 刪除一個或多個元件,或明確的任何操作調整大小背襯陣列; 僅僅設置元素的值不是結構 修改)

可以使用synchronizedList爲此

List list = Collections.synchronizedList(new ArrayList(...)); 
相關問題