Skip to content

Commit 396fb0c

Browse files
committed
Support for multi-threaded addConverter calls
Closes gh-26183
1 parent 5328184 commit 396fb0c

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717
package org.springframework.core.convert.support;
1818

1919
import java.lang.reflect.Array;
20-
import java.util.ArrayDeque;
2120
import java.util.ArrayList;
2221
import java.util.Collections;
2322
import java.util.Deque;
2423
import java.util.HashSet;
25-
import java.util.LinkedHashMap;
26-
import java.util.LinkedHashSet;
2724
import java.util.List;
2825
import java.util.Map;
2926
import java.util.Optional;
3027
import java.util.Set;
28+
import java.util.concurrent.ConcurrentHashMap;
29+
import java.util.concurrent.ConcurrentLinkedDeque;
30+
import java.util.concurrent.CopyOnWriteArraySet;
3131

3232
import org.springframework.core.DecoratingProxy;
3333
import org.springframework.core.ResolvableType;
@@ -500,9 +500,9 @@ public int compareTo(ConverterCacheKey other) {
500500
*/
501501
private static class Converters {
502502

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

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

507507
public void add(GenericConverter converter) {
508508
Set<ConvertiblePair> convertibleTypes = converter.getConvertibleTypes();
@@ -513,8 +513,7 @@ public void add(GenericConverter converter) {
513513
}
514514
else {
515515
for (ConvertiblePair convertiblePair : convertibleTypes) {
516-
ConvertersForPair convertersForPair = getMatchableConverters(convertiblePair);
517-
convertersForPair.add(converter);
516+
getMatchableConverters(convertiblePair).add(converter);
518517
}
519518
}
520519
}
@@ -652,7 +651,7 @@ private List<String> getConverterStrings() {
652651
*/
653652
private static class ConvertersForPair {
654653

655-
private final Deque<GenericConverter> converters = new ArrayDeque<>(1);
654+
private final Deque<GenericConverter> converters = new ConcurrentLinkedDeque<>();
656655

657656
public void add(GenericConverter converter) {
658657
this.converters.addFirst(converter);

0 commit comments

Comments
 (0)