在不同线程中与下一组执行 foreach、add、remove、size 操作是否安全?
private final Set<MyObject> myConcurrentHashSet = ConcurrentHashMap.newKeySet();
即我不需要在 foreach 或 size 操作中获得最大精度,但我需要确保在执行 foreach/添加/删除/大小操作时不会出现任何异常。
我知道ConcurrentHashMap是线程安全的,但我对其Set的线程安全感到困惑。
最佳答案
是的,keySet View 是线程安全的,java >=8中的newKeySet相当于这个java 7形式:
对于java <= 7
ConcurrentHashMap c = ...;
Set threadSafeSet = c.keySet();
对于java>=8
Set threadSafeSet = ConcurrentHashMap.newKeySet();
关于java - foreach中ConcurrentHashMap的Set是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45838909/