jdk/src/share/classes/java/text/DecimalFormat.java
changeset 15260 7af2d7a87806
parent 14020 b17c22caa38c
child 16010 2727163b5df5
--- a/jdk/src/share/classes/java/text/DecimalFormat.java	Sun Jan 13 19:57:06 2013 -0500
+++ b/jdk/src/share/classes/java/text/DecimalFormat.java	Mon Jan 14 11:09:53 2013 -0800
@@ -54,6 +54,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import sun.util.locale.provider.LocaleProviderAdapter;
+import sun.util.locale.provider.ResourceBundleBasedAdapter;
 
 /**
  * <code>DecimalFormat</code> is a concrete subclass of
@@ -394,28 +395,17 @@
      * @see java.text.NumberFormat#getPercentInstance
      */
     public DecimalFormat() {
+        // Get the pattern for the default locale.
         Locale def = Locale.getDefault(Locale.Category.FORMAT);
-        // try to get the pattern from the cache
-        String pattern = cachedLocaleData.get(def);
-        if (pattern == null) {  /* cache miss */
-            // Get the pattern for the default locale.
-            LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(NumberFormatProvider.class, def);
-            switch (adapter.getAdapterType()) {
-            case HOST:
-            case SPI:
-                adapter = LocaleProviderAdapter.getResourceBundleBased();
-                break;
-            }
-            ResourceBundle rb = adapter.getLocaleData().getNumberFormatData(def);
-            String[] all = rb.getStringArray("NumberPatterns");
-            pattern = all[0];
-            /* update cache */
-            cachedLocaleData.putIfAbsent(def, pattern);
+        LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(NumberFormatProvider.class, def);
+        if (!(adapter instanceof ResourceBundleBasedAdapter)) {
+            adapter = LocaleProviderAdapter.getResourceBundleBased();
         }
+        String[] all = adapter.getLocaleResources(def).getNumberPatterns();
 
         // Always applyPattern after the symbols are set
         this.symbols = DecimalFormatSymbols.getInstance(def);
-        applyPattern(pattern, false);
+        applyPattern(all[0], false);
     }
 
 
@@ -4154,10 +4144,4 @@
 
     // Proclaim JDK 1.1 serial compatibility.
     static final long serialVersionUID = 864413376551465018L;
-
-    /**
-     * Cache to hold the NumberPattern of a Locale.
-     */
-    private static final ConcurrentMap<Locale, String> cachedLocaleData
-        = new ConcurrentHashMap<>(3);
 }