Mercurial > hg > icedtea7-forest-aarch64 > jdk
changeset 8210:43db70cf8b20
7145454: JVM wide monitor lock in Currency.getInstance(String)
Reviewed-by: okutsu
author | naoto |
---|---|
date | Wed, 21 Mar 2012 10:10:38 -0700 |
parents | 715d90e998c9 |
children | ffd8b8da0696 |
files | src/share/classes/java/util/Currency.java |
diffstat | 1 files changed, 6 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/Currency.java Wed Oct 08 14:25:04 2014 +0100 +++ b/src/share/classes/java/util/Currency.java Wed Mar 21 10:10:38 2012 -0700 @@ -34,6 +34,8 @@ import java.io.Serializable; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import java.util.regex.Pattern; import java.util.regex.Matcher; @@ -99,7 +101,7 @@ // class data: instance map - private static HashMap<String, Currency> instances = new HashMap<String, Currency>(7); + private static ConcurrentMap<String, Currency> instances = new ConcurrentHashMap<>(7); private static HashSet<Currency> available; @@ -286,7 +288,6 @@ private static Currency getInstance(String currencyCode, int defaultFractionDigits, int numericCode) { - synchronized (instances) { // Try to look up the currency code in the instances table. // This does the null pointer check as a side effect. // Also, if there already is an entry, the currencyCode must be valid. @@ -324,10 +325,9 @@ } } - instance = new Currency(currencyCode, defaultFractionDigits, numericCode); - instances.put(currencyCode, instance); - return instance; - } + instance = instances.putIfAbsent(currencyCode, + new Currency(currencyCode, defaultFractionDigits, numericCode)); + return (instance != null ? instance : instances.get(currencyCode)); } /**