哪个Java集合类更适合在多线程环境中使用

时间:2013-12-27 09:43:13

标签: java multithreading collections concurrency java.util.concurrent

您好我是Java多线程环境的新手。我必须在一个线程中添加,更新和删除集合中的对象集。同时我将检查并在另一个线程上迭代该对象。

列表和设置不是线程安全的。任何人都可以分享一下,哪个集合/ Map类更适合在多线程环境中使用?

6 个答案:

答案 0 :(得分:6)

是的,

java中有ConcurrentHashMap<K,V>,您可以使用它。

  

一个哈希表,支持检索的完全并发和可更新的预期并发性。

更多Collections实用程序类具有同步方法。

Collections.synchronizedCollection(YourCollection);

等其他方法一样

synchronizedList(List<T> list)

synchronizedSet(Set<T> s)

答案 1 :(得分:1)

如果您不想保存键值或“Collections.synchronizedList()”,可能是矢量。

答案 2 :(得分:1)

您可以使用从ConcurrentHashMap创建的并发哈希集:

 Set<K> set = Collections.newSetFromMap(new ConcurrentHashMap<K, Object>());

此集合是线程安全的,具有ConcurrentHashMap的功能 - 它比Collections.synchronized*包装器更快。

请注意,虽然集合的线程安全性并不能保证其项目的线程安全性。为了实现最少的共同可能的方法是将项目设为只读:即访问时不可变或返回副本。

答案 3 :(得分:1)

使用Collections API

public static <T> Set<T> synchronizedSet(Set<T> s)

返回由指定集

支持的同步(线程安全)集
public static <T> List<T> synchronizedList(List<T> list)

返回由指定列表

支持的同步(线程安全)列表

您可以将List或Set实现传递给上述方法并获得一个线程安全的

答案 4 :(得分:0)

查看java.util.concurrent包,它有几个线程安全集合

答案 5 :(得分:0)

您可以使用CopyOnWriteArrayListCopyOnWriteArraySet 阅读它here