Review this Java lazy-singleton initialization.
Is this double-checked locking correct? If not, what is the precise failure?