Very detailed explanation: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html Some more information, also demo in fact not much difference for most cast: http://blogs.sun.com/roller/page/cwebster?entry=double_check_locking Even more discussion - http://www-128.ibm.com/developerworks/java/library/j-dcl.html In Chinese - http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization