diff --git a/jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java b/jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java index 35504bcadf0..88920aaf50c 100644 --- a/jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java +++ b/jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java @@ -66,14 +66,14 @@ public abstract class LocaleObjectCache { CacheEntry newEntry = new CacheEntry<>(key, newVal, queue); - while (value == null) { - cleanStaleEntries(); - entry = map.putIfAbsent(key, newEntry); - if (entry == null) { + entry = map.putIfAbsent(key, newEntry); + if (entry == null) { + value = newVal; + } else { + value = entry.get(); + if (value == null) { + map.put(key, newEntry); value = newVal; - break; - } else { - value = entry.get(); } } }