我只調用addAll並清除列表,但需要它來線程安全,是否有任何現有List for this?謝謝java列表適用於addAll和clear的線程安全
1
A
回答
1
列表不同步。 所以它不是線程安全的。 如果你想把它當作線程安全的方式,可以使列表,線程安全的,你可以使用
1
使用Collections.synchronizedList(List list)
將滿足這些要求的清單創建,提供的同步列表是調用addAll(...)
時的目標對象,而不是參數。
如果同步列表(如上創建)是參數,則問題是addAll(list)
迭代參數list
,並且迭代同步列表不是原子的。如果另一個線程在添加時更新list
,則您有可能得到ConcurrentModificationException
。
如果你需要做一個線程安全的方式addAll(list)
在併發更新的臉list
,那麼你需要做一個list
CopyOnWriteArrayList
。
1
java.util.concurrent中有一個併發列表實現。特別是CopyOnWriteArrayList。
0
如果你想使用exsting列表作爲同步單,去Collections.synchronizedList(list)
或正在創建目標列表,那麼你可以去CopyOnWriteArrayList
-1
的CopyOnWriteArrayList是synchronizedList併發替代,在某些常見的情況下提供更好的併發&消除了在迭代期間鎖定或複製集合的需要。
寫入集合上的副本從派生它們的線程安全性的事實是,作爲一個有效的不可變對象被正確發佈,訪問它時不需要進一步的同步。他們通過創建&每次修改時重新發布集合的新副本來實現可變性。無論後續修改如何,該集合都不會引發ConcurrentModificationException。
相關問題
- 1. 線程安全java - 收集/列表
- 2. Java隊列和線程安全
- 3. java線程安全:線程安全嗎?
- 4. 列表線程安全嗎?
- 5. VB.NET線程安全列表?
- 6. 線程安全,列表,綁定和WPF
- 7. 使用StringCollectionEditor與線程安全列表
- 8. Java線程安全的Sqlite?
- 9. 的Java JDBC線程安全
- 10. Java:線程安全的RandomAccessFile
- 11. 關於線程安全和JPA的EntityManager
- 12. 適用於Windows XP的線程安全GetTickCount64的實現
- 13. 此實現是否適用於Java中的無鎖線程安全惰性Singleton?
- 14. Java靜態和線程安全
- 15. Java靜態方法和線程安全
- 16. Java CDI @PersistenceContext和線程安全
- 17. 波動和Java線程安全
- 18. 適用於Scala和Java的類型安全的Builder庫
- 19. 帶線程的線程安全隊列
- 20. Java線程安全遞歸
- 21. Java方法線程安全
- 22. java數組線程安全
- 23. 多線程安全在Java
- 24. Java - jxls - XLSTransformer線程安全
- 25. Java InputStream/XSL線程安全
- 26. java單線程安全
- 27. Java XPathFactory線程安全
- 28. Java線程getId()線程安全嗎?
- 29. 部分線程安全是否使Java類線程安全?
- 30. java中的優化線程安全列表
「線程安全」是一個很大的術語。如果兩個線程同時調用addAll,是不是足夠了沒有'ConcurrentModificationException',或者是否需要第二個線程元素之前添加的第一個線程的所有元素? – Mureinik 2014-10-09 10:08:56
如果您想要高質量的特定答案,您確實需要添加有關該方案的更多詳細信息。 – biziclop 2014-10-09 10:18:24