gpt4 book ai didi

java - 同步方法以防止 ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-01 21:18:46 26 4
gpt4 key购买 nike

我有一个 Java 1.8 类,它包含两个集合:

Map<Key,Object>
Set<Object>

我的类(class)五个方法:

addObjectToMap()
removeObjectFromMap()
addObjectToSet()
removeObjectFromSet()

loopOverEverything(){
for(Object o : mySet){
for(Object o2 : myMap.getKeySet()){
doSomething(o,o2);
}
}
}

该类的重点是实现观察者模式,但在观察者和被观察者中都非常灵活。我面临的问题是,当线程在循环进行时调用添加/删除方法时,最后一个方法很容易抛出 ConcurrentModificationException。我正在考虑同步“this”上的所有方法:

set.add(object);

会变成

synchronized(this){
set.add(object);
}

我会向其他 4 个方法添加类似的同步语句,包括循环方法。

这行得通吗?我知道同步方法可能会导致瓶颈。尽管目前不存在性能问题,但我希望合理化此设计,并了解对性能影响较小的可能替代方案。

最佳答案

不,除非循环也同步,否则它是不安全的。如果您想避免每个循环期间的锁定开销,请考虑使用并发集合,例如 ConcurrentHashMapCollections.newSetFromMap(new ConcurrentHashMap<>()) .

关于java - 同步方法以防止 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39479909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com