有如下4种选择:
- Collections.synchronizedSet(new HashSet<>())
- new CopyOnWriteArraySet<>()
- Collections.newSetFromMap(new ConcurrentHashMap<>())
- ConcurrentHashMap.newKeySet()
Collections.synchronizedSet(new HashSet<>())
since 1.2
锁粒度大,不推荐使用。
new CopyOnWriteArraySet<>()
since 1.5
基于CopyOnWriteArrayList实现,适合遍历操作远多于写操作的场景。
Collections.newSetFromMap(new ConcurrentHashMap<>())
since 1.6
通过传入线程安全的map构建线程安全的set。
ConcurrentHashMap.newKeySet()
since 1.8
基于ConcurrentHashMap构建的线程安全的set。
一般情况下,推荐这种方式。
和上一种方式相比,优势可以参考:ConcurrentHashMap.newKeySet() vs Collections.newSetFromMap()
网友评论