我只调用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. 列表线程安全吗?
- 2. VB.NET线程安全列表?
- 3. 线程安全,列表,绑定和WPF
- 4. Java:线程安全的RandomAccessFile
- 5. Java静态和线程安全
- 6. 适用于Scala和Java的类型安全的Builder库
- 7. java单线程安全
- 8. Java线程安全递归
- 9. java数组线程安全
- 10. Java XPathFactory线程安全
- 11. Java线程getId()线程安全吗?
- 12. java中的优化线程安全列表
- 13. 部分线程安全是否使Java类线程安全?
- 14. 关于线程安全
- 15. 关于线程安全
- 16. 列表<T>线程安全
- 17. 线程安全标准:列表C++
- 18. 关于队列和线程安全的查询
- 19. PHP线程安全和非线程安全的Windows
- 20. Azure Blob和队列线程安全
- 21. JSON序列化和线程安全
- 22. 线程安全和通用数组列表?
- 23. 在Java中,是用于Collections.sort()线程安全的比较器吗?
- 24. 线程安全阵列
- 25. 线程安全应用程序中的线程安全
- 26. 线程是否表示线程安全?
- 27. 使用XL工作表的java中的线程安全性
- 28. 用于学习内存模型的资源和java中的线程安全性
- 29. NHibernate ISession的使用和线程安全
- 30. 的Java:线程安全类的实例
“线程安全”是一个很大的术语。如果两个线程同时调用addAll,是不是足够了没有'ConcurrentModificationException',或者是否需要第二个线程元素之前添加的第一个线程的所有元素? – Mureinik 2014-10-09 10:08:56
如果您想要高质量的特定答案,您确实需要添加有关该方案的更多详细信息。 – biziclop 2014-10-09 10:18:24