gpt4 book ai didi

java - 更改 HashMap 值的成员会导致 java.util.ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-01 08:54:37 25 4
gpt4 key购买 nike

下面的代码抛出并发修改异常,异常指向的行是for循环的第一行

private synchronized void updateAllCacheValues() {
for (Map.Entry<Configurations, SalesConfiguration> entry : ConfigurationCache.entrySet()) {
Configurations conf = entry.getKey();
SalesConfiguration saleConfiguration = ConfigurationCache.get(conf);
Map<String, String> newMap = generateKeyValueMapFromConfigurations(conf);
lastLoadTimestamp = new Date();
saleConfiguration.setMap(newMap, lastLoadTimestamp);
}
logger.debug("Successfully updated all cached configurations., cache size " + ConfigurationCache.size() + "LAST_LOAD_TIME" + lastLoadTimestamp);
}

下面是异常跟踪

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)
at java.util.HashMap$EntryIterator.next(HashMap.java:1463)
at java.util.HashMap$EntryIterator.next(HashMap.java:1461)
at com.learning.java.daily.updateAllCacheValues(ConfigurationLoader.java:237)
at com.learning.java.daily.updateAllCacheValues.impl.ConfigurationLoader.loadConfigurations(ConfigurationLoader.java:156)

我无法猜测是什么导致了这个异常,因为我写了一个示例测试,我正在修改Map的值的属性,但没有出现并发修改异常。

最佳答案

要回答标题中的问题:,在迭代条目集时修改HashMap中的值对象不能单独产生ConcurrentModificationException。一定还有其他事情发生。

调用generateKeyValueMapFromConfigurations()saleConfiguration.setMap()是否可以修改 map ?您的 ConfigurationCache 可能会被其他并发线程修改吗?我知道我只是猜测,这是我们利用手头的信息所能做的最好的事情。

关于java - 更改 HashMap 值的成员会导致 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42129099/

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