diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index 2e966c7a28e..1134483e88a 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -19,14 +19,15 @@ package org.springframework.core.convert.support; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collections; +import java.util.Deque; import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.CopyOnWriteArraySet; import org.springframework.core.DecoratingProxy; import org.springframework.core.ResolvableType; @@ -499,9 +500,9 @@ public class GenericConversionService implements ConfigurableConversionService { */ private static class Converters { - private final Set globalConverters = new LinkedHashSet<>(); + private final Set globalConverters = new CopyOnWriteArraySet<>(); - private final Map converters = new LinkedHashMap<>(36); + private final Map converters = new ConcurrentHashMap<>(256); public void add(GenericConverter converter) { Set convertibleTypes = converter.getConvertibleTypes(); @@ -512,8 +513,7 @@ public class GenericConversionService implements ConfigurableConversionService { } else { for (ConvertiblePair convertiblePair : convertibleTypes) { - ConvertersForPair convertersForPair = getMatchableConverters(convertiblePair); - convertersForPair.add(converter); + getMatchableConverters(convertiblePair).add(converter); } } } @@ -651,7 +651,7 @@ public class GenericConversionService implements ConfigurableConversionService { */ private static class ConvertersForPair { - private final LinkedList converters = new LinkedList<>(); + private final Deque converters = new ConcurrentLinkedDeque<>(); public void add(GenericConverter converter) { this.converters.addFirst(converter);