我想知道这个调用是否是线程安全的。例如,如果我有一组 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/