diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java index ab4ee4e14d..6daeb9fdf3 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java @@ -239,7 +239,11 @@ public final class ConfigurationUtils { } if (CollectionUtils.isNotEmptyMap(configMap)) { - for(Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for(Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); V val = entry.getValue(); if (StringUtils.startsWithIgnoreCase(key, prefix) @@ -276,7 +280,11 @@ public final class ConfigurationUtils { if (!prefix.endsWith(".")) { prefix += "."; } - for (Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for (Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); if (StringUtils.startsWithIgnoreCase(key, prefix) && key.length() > prefix.length() @@ -311,7 +319,11 @@ public final class ConfigurationUtils { } Set ids = new LinkedHashSet<>(); for (Map configMap : configMaps) { - for (Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for (Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); V val = entry.getValue(); if (StringUtils.startsWithIgnoreCase(key, prefix)