Double checked locking in Java is broken.
Ref: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html