Mercurial > hg > release > icedtea7-forest-2.3 > jdk
changeset 6327:8d3ec25853a6
7196533: TimeZone.getDefault() slow due to synchronization bottleneck
Reviewed-by: okutsu
author | coffeys |
---|---|
date | Tue, 15 Jan 2013 10:37:49 +0000 |
parents | 7764e0491978 |
children | c2f898043f95 |
files | src/share/classes/java/util/TimeZone.java |
diffstat | 1 files changed, 18 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/TimeZone.java Tue Oct 08 16:37:50 2013 +0100 +++ b/src/share/classes/java/util/TimeZone.java Tue Jan 15 10:37:49 2013 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -162,16 +162,6 @@ private static final int ONE_HOUR = 60*ONE_MINUTE; private static final int ONE_DAY = 24*ONE_HOUR; - /* - * Provides access implementation-private methods without using reflection - * - * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't - * been loaded. If so, it implies that AWTSecurityManager is not our - * SecurityManager and we can use a local static variable. - * This works around a build time issue. - */ - private static JavaAWTAccess javaAWTAccess; - // Proclaim serialization compatibility with JDK 1.1 static final long serialVersionUID = 3581463369166924961L; @@ -729,9 +719,15 @@ * Returns the default TimeZone in an AppContext if any AppContext * has ever used. null is returned if any AppContext hasn't been * used or if the AppContext doesn't have the default TimeZone. + * + * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't + * been loaded. If so, it implies that AWTSecurityManager is not our + * SecurityManager and we can use a local static variable. + * This works around a build time issue. */ - private synchronized static TimeZone getDefaultInAppContext() { - javaAWTAccess = SharedSecrets.getJavaAWTAccess(); + private static TimeZone getDefaultInAppContext() { + // JavaAWTAccess provides access implementation-private methods without using reflection. + JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess(); if (javaAWTAccess == null) { return mainAppContextDefault; } else { @@ -753,9 +749,15 @@ * tz. null is handled special: do nothing if any AppContext * hasn't been used, remove the default TimeZone in the * AppContext otherwise. + * + * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't + * been loaded. If so, it implies that AWTSecurityManager is not our + * SecurityManager and we can use a local static variable. + * This works around a build time issue. */ - private synchronized static void setDefaultInAppContext(TimeZone tz) { - javaAWTAccess = SharedSecrets.getJavaAWTAccess(); + private static void setDefaultInAppContext(TimeZone tz) { + // JavaAWTAccess provides access implementation-private methods without using reflection. + JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess(); if (javaAWTAccess == null) { mainAppContextDefault = tz; } else { @@ -820,7 +822,7 @@ private static final int GMT_ID_LENGTH = 3; // a static TimeZone we can reference if no AppContext is in place - private static TimeZone mainAppContextDefault; + private static volatile TimeZone mainAppContextDefault; /** * Parses a custom time zone identifier and returns a corresponding zone.