diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index acca382b4..27782312f 100644 --- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -318,7 +318,8 @@ public class PhoneNumberUtil { private static PhoneNumberUtil instance = null; // A mapping from a region code to the PhoneMetadata for that region. - private Map regionToMetadataMap = new HashMap(); + private final Map regionToMetadataMap = + Collections.synchronizedMap(new HashMap()); // A cache for frequently used region-specific regular expressions. // As most people use phone numbers primarily from one to two countries, and there are roughly 60 @@ -1629,8 +1630,10 @@ public class PhoneNumberUtil { if (!isValidRegionCode(regionCode)) { return null; } - if (!regionToMetadataMap.containsKey(regionCode)) { - loadMetadataForRegionFromFile(currentFilePrefix, regionCode); + synchronized (regionToMetadataMap) { + if (!regionToMetadataMap.containsKey(regionCode)) { + loadMetadataForRegionFromFile(currentFilePrefix, regionCode); + } } return regionToMetadataMap.get(regionCode); }