Skip to content

Commit ce67b89

Browse files
committed
Support for multi-threaded addConverter calls
Closes gh-26183 (cherry picked from commit 396fb0c)
1 parent 736af46 commit ce67b89

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
import java.lang.reflect.Array;
2020
import java.util.ArrayList;
2121
import java.util.Collections;
22+
import java.util.Deque;
2223
import java.util.HashSet;
23-
import java.util.LinkedHashMap;
24-
import java.util.LinkedHashSet;
25-
import java.util.LinkedList;
2624
import java.util.List;
2725
import java.util.Map;
2826
import java.util.Optional;
2927
import java.util.Set;
28+
import java.util.concurrent.ConcurrentHashMap;
29+
import java.util.concurrent.ConcurrentLinkedDeque;
30+
import java.util.concurrent.CopyOnWriteArraySet;
3031

3132
import org.springframework.core.DecoratingProxy;
3233
import org.springframework.core.ResolvableType;
@@ -499,9 +500,9 @@ public int compareTo(ConverterCacheKey other) {
499500
*/
500501
private static class Converters {
501502

502-
private final Set<GenericConverter> globalConverters = new LinkedHashSet<>();
503+
private final Set<GenericConverter> globalConverters = new CopyOnWriteArraySet<>();
503504

504-
private final Map<ConvertiblePair, ConvertersForPair> converters = new LinkedHashMap<>(36);
505+
private final Map<ConvertiblePair, ConvertersForPair> converters = new ConcurrentHashMap<>(256);
505506

506507
public void add(GenericConverter converter) {
507508
Set<ConvertiblePair> convertibleTypes = converter.getConvertibleTypes();
@@ -512,8 +513,7 @@ public void add(GenericConverter converter) {
512513
}
513514
else {
514515
for (ConvertiblePair convertiblePair : convertibleTypes) {
515-
ConvertersForPair convertersForPair = getMatchableConverters(convertiblePair);
516-
convertersForPair.add(converter);
516+
getMatchableConverters(convertiblePair).add(converter);
517517
}
518518
}
519519
}
@@ -651,7 +651,7 @@ private List<String> getConverterStrings() {
651651
*/
652652
private static class ConvertersForPair {
653653

654-
private final LinkedList<GenericConverter> converters = new LinkedList<>();
654+
private final Deque<GenericConverter> converters = new ConcurrentLinkedDeque<>();
655655

656656
public void add(GenericConverter converter) {
657657
this.converters.addFirst(converter);

0 commit comments

Comments
 (0)