【发布时间】:2015-07-04 19:46:18
【问题描述】:
List 有 Vector,Map 有 Hashtable。
类似地,我们是否有任何具有 Set 线程安全方法的类?
【问题讨论】:
-
ConcurrentSkipListSet,CopyOnWriteArraySet- 均记录在案
标签: java list dictionary set
List 有 Vector,Map 有 Hashtable。
类似地,我们是否有任何具有 Set 线程安全方法的类?
【问题讨论】:
ConcurrentSkipListSet, CopyOnWriteArraySet - 均记录在案
标签: java list dictionary set
一个选项:(java8)
Set<String> set = ConcurrentHashMap.newKeySet();
类似于HashSet,但同时使用也安全。
【讨论】:
Collections.newSetFromMap(new ConcurrentHashMap<>())一样:见stackoverflow.com/questions/32054517/…
有一些方法可以获得线程安全集。一些例如
【讨论】:
Vector 和 Hashtable 是 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
【讨论】:
java.util.concurrent.ConcurrentFoo。