6799689: Make sun.misc.FloatingDecimal.hexFloatPattern static field initialized lazily
authormchung
Fri, 27 Feb 2009 13:43:48 -0800
changeset 2170 f4454a8d22de
parent 2169 638bb0cc0258
child 2171 465f6befee43
6799689: Make sun.misc.FloatingDecimal.hexFloatPattern static field initialized lazily Summary: Lazily initialize the hexFloatPattern static field Reviewed-by: darcy
jdk/src/share/classes/sun/misc/FloatingDecimal.java
--- a/jdk/src/share/classes/sun/misc/FloatingDecimal.java	Thu Feb 26 18:51:57 2009 -0800
+++ b/jdk/src/share/classes/sun/misc/FloatingDecimal.java	Fri Feb 27 13:43:48 2009 -0800
@@ -1867,10 +1867,16 @@
      * Grammar is compatible with hexadecimal floating-point constants
      * described in section 6.4.4.2 of the C99 specification.
      */
-    private static Pattern hexFloatPattern = Pattern.compile(
+    private static Pattern hexFloatPattern = null;
+    private static synchronized Pattern getHexFloatPattern() {
+        if (hexFloatPattern == null) {
+           hexFloatPattern = Pattern.compile(
                    //1           234                   56                7                   8      9
                     "([-+])?0[xX](((\\p{XDigit}+)\\.?)|((\\p{XDigit}*)\\.(\\p{XDigit}+)))[pP]([-+])?(\\p{Digit}+)[fFdD]?"
                     );
+        }
+        return hexFloatPattern;
+    }
 
     /*
      * Convert string s to a suitable floating decimal; uses the
@@ -1880,7 +1886,7 @@
    static FloatingDecimal parseHexString(String s) {
         // Verify string is a member of the hexadecimal floating-point
         // string language.
-        Matcher m = hexFloatPattern.matcher(s);
+        Matcher m = getHexFloatPattern().matcher(s);
         boolean validInput = m.matches();
 
         if (!validInput) {