【问题标题】:Which Java collection classes are better to use in multi-thread environment [closed]哪些 Java 集合类更适合在多线程环境中使用 [关闭]
【发布时间】:2013-12-27 09:43:13
【问题描述】:

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

List 和 set 不是线程安全的。谁能告诉我哪一个集合/地图类更适合在多线程环境中使用?

【问题讨论】:

  • 提供有关集合类型的更多详细信息。
  • docs.oracle.com/javase/7/docs/api/java/util/concurrent/… ... 我的意思是,你甚至用答案标记这个问题(谁赞成这个?)。
  • 如果你能确保每个线程只有一个线程访问该集合,那么单线程集合仍然更好用。答案是;这取决于。 ConcurrentHashMap 很棒,但比 HashMap 大得多,速度也慢一些,只有在需要时才使用它。

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


【解决方案1】:

是的,

java里面有ConcurrentHashMap<K,V>,可以用。

支持检索的完全并发和可调整的预期更新并发的哈希表。

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

Collections.synchronizedCollection(YourCollection);

还有其他方法,比如

synchronizedList(List<T> list)

synchronizedSet(Set<T> s)

【讨论】:

  • 嗨,suresh,在我的情况下,我不需要使用键值和对值。
  • @Murali 是的 Murali。编辑了我的帖子。
  • 即使你使用 synchronizedSet(Set s) 或 synchronizedList(List list) ,请确保你同步了返回集。参考docs.oracle.com/javase/7/docs/api/java/util/…
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • 感谢您的宝贵意见。
    【解决方案4】:

    使用集合 API

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

    返回由指定集支持的同步(线程安全)集

    public static <T> List<T> synchronizedList(List<T> list)
    

    返回由指定列表支持的同步(线程安全)列表

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        您可以使用CopyOnWriteArrayListCopyOnWriteArraySet
        也可以阅读here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 2011-01-13
          • 2014-05-09
          • 2011-11-13
          • 1970-01-01
          • 2013-01-02
          • 2017-07-26
          相关资源
          最近更新 更多