在 Java 中,Set 本身是一个接口,是否线程安全取决于你使用的具体实现类。
| Set 实现类 | 是否线程安全 | 说明 |
|---|---|---|
HashSet |
❌ 不安全 | 最常用,非同步 |
LinkedHashSet |
❌ 不安全 | 基于 HashSet |
TreeSet |
❌ 不安全 | 基于 TreeMap |
Collections.synchronizedSet() |
✅ 安全 | 方法级同步(粗粒度) |
CopyOnWriteArraySet |
✅ 安全 | 写时复制,适合读多写少 |
ConcurrentHashMap.newKeySet() |
✅ 安全 | JDK 8+,基于 ConcurrentHashMap |
Collections.synchronizedSetSet<String> set = Collections.synchronizedSet(new HashSet<>());
synchronized (set) {
for (String s : set) {
// 操作
}
}
CopyOnWriteArraySetSet<String> set = new CopyOnWriteArraySet<>();
ConcurrentHashMap.newKeySet()(推荐)Set<String> set = ConcurrentHashMap.newKeySet();
HashSet / TreeSet 不是线程安全的ConcurrentHashMap.newKeySet()CopyOnWriteArraySetCollections.synchronizedSet如果你有具体使用场景(并发量、读写比例),我可以帮你选最合适的实现。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。