【问题标题】:Is there any threadsafe class for SetSet 是否有任何线程安全类
【发布时间】:2015-07-04 19:46:18
【问题描述】:

List 有 Vector,Map 有 Hashtable。

类似地,我们是否有任何具有 Set 线程安全方法的类?

【问题讨论】:

  • ConcurrentSkipListSet, CopyOnWriteArraySet - 均记录在案

标签: java list dictionary set


【解决方案1】:

一个选项:(java8)

Set<String> set = ConcurrentHashMap.newKeySet();

类似于HashSet,但同时使用也安全。

【讨论】:

【解决方案2】:

有一些方法可以获得线程安全集。一些例如

  1. CopyOnWriteArraySet
  2. Collections.synchronizedSet(集集) 等等

查看更多详情 - Different types of thread-safe Sets in Java

【讨论】:

    【解决方案3】:

    VectorHashtable 是 Collection 框架引入之前的遗留物,应尽可能避免使用。 “新”方法是使用java.util.concurrent 包中的专用集合,或者制作普通的List / Map / Set,然后使用Collections.synchronized... 实用程序使它们同步。见https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedSet-java.util.Set-

    请记住在使用迭代器时同步使用Collections.synchronized... 获得的对象,因为迭代器不同步,需要手动同步。没有任何同步可以导致ConcurrentModificationException

    【讨论】:

    • Collections.synchronized... 效率低于专门的并发数据结构,因为它们只是在 every 调用上同步的包装器。如果可能,最好使用java.util.concurrent.ConcurrentFoo
    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 2019-06-27
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多