Double-checked locking is broken [ http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html ] so we should not use it.

What are the alternatives? Is it acceptable to have a small chance that a member reader is initialized twice? Initialize all member readers up front?