Threadsafe Java Code (for Java 1.5 or later)
// Works with acquire/release semantics for volatile // Broken under current semantics for volatile class Foo { private volatile Helper helper = null; public Helper getHelper() { if (helper == null) { synchronized(this) { if (helper == null) helper = new Helper(); } } return helper; } }
Q: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html