Author: sebb
Date: Mon Nov 30 16:39:19 2009
New Revision: 885485
URL: http://svn.apache.org/viewvc?rev=885485&view=rev
Log:
Use IODH idiom instead of volatile and double-checked locking
Modified:
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/util/Introspector.java
Modified:
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/util/Introspector.java
URL:
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/util/Introspector.java?rev=885485&r1=885484&r2=885485&view=diff
==============================================================================
---
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/util/Introspector.java
(original)
+++
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/util/Introspector.java
Mon Nov 30 16:39:19 2009
@@ -33,8 +33,12 @@
* @since 1.0
*/
public class Introspector {
- /** The default uberspector that handles all introspection patterns. */
- private static volatile Uberspect uberSpect;
+
+ private static class UberspectHolder{// Implements init on demand holder
idiom
+ /** The default uberspector that handles all introspection patterns. */
+ private static final Uberspect UBERSPECT = new
UberspectImpl(LogFactory.getLog(Introspector.class));
+ }
+
/** The logger to use for all warnings & errors. */
protected final Log rlog;
/** The (low level) introspector to use for introspection services. */
@@ -105,20 +109,9 @@
* instead of the default one.</p>
* @return Uberspect the default uberspector instance.
*/
- // CSOFF: DoubleCheckedLocking
public static Uberspect getUberspect() {
- // uses a double-locking pattern
- if (uberSpect == null) {
- synchronized (Uberspect.class) {
- if (uberSpect == null) {
- Log logger = LogFactory.getLog(Introspector.class);
- uberSpect = new UberspectImpl(logger);
- }
- }
- }
- return uberSpect;
+ return UberspectHolder.UBERSPECT;
}
- // CSON: DoubleCheckedLocking
/**
* Creates a new instance of Uberspect.