java - Guava ImmutableSet.copyOf() 线程安全吗?

标签 java multithreading guava

我想知道这个调用是否是线程安全的。例如,如果我有一组 s:

Set<String> s = new HashSet<>();

还有两个线程A和B,线程A修改集合:

for (int i = 0; i < 1234; i++) {
    // add, remove from s
}

当线程 B 从 s 创建 ImmutableSets 时:

for (int i = 0; i < 5678; i++) {
    Set<String> newS =  ImmutableSet.copyOf(s);
}

是否可以安全地假设每次调用 ImmutableSet.copyOf() 时我都会及时获得 s 的有效状态的不可变集?是否会发生任何类型的异常(如 ConcurrentModificationException)?

如果它是线程安全的,它是如何在不锁定集合的情况下实现的?

最佳答案

相关的问题不是 copyOf 是否安全——而是它从 复制的集合是否安全,特别是它创建的 Iterators 是否安全它的 iterator() 方法是线程安全的。对于 HashMap,答案是否定的。

关于java - Guava ImmutableSet.copyOf() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448811/

相关文章:

java - Guava 资源

java - 从数组返回内容

java - 查看嵌入在 jar 文件中的 .class 文件中的方法 |可能吗 ?

java - 如何让 RecyclerView onClick 在 Fragment 中工作

java - CompletableFuture#whenComplete 如果使用 thenApply 则不调用

c++ - 为什么将条件写入转换为无条件写入不是线程安全优化?

java - For 循环显示前一个值和下一个值

c++ - 两个重叠的互斥锁会导致死锁吗?

java - 为什么常见的 Map 实现不为 Map.get() 缓存 Map.containsKey() 的结果

java - 为算术级数制作惰性迭代器?