diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUService.java b/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUService.java index 2b6981d384c..1eb1a0767f3 100644 --- a/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUService.java +++ b/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUService.java @@ -592,13 +592,17 @@ public class ICUService extends ICUNotifier { Factory f = lIter.previous(); f.updateVisibleIDs(mutableMap); } - this.idcache = Collections.unmodifiableMap(mutableMap); + // Capture the return value in a local variable. + // Avoids returning an idcache value changed by another thread (could be null after clearCaches()). + Map result = Collections.unmodifiableMap(mutableMap); + this.idcache = result; + return result; } finally { factoryLock.releaseRead(); } } + return idcache; } - return idcache; } private Map idcache;