The naked "double-checked locking" anti-pattern that you are using makes your use of the Singleton pattern seem almost canonical by comparison. If you follow the link that you gave earlier, there are three idiom's quoted, in your reference, that demonstrate how to use double-checked locking pattern properly. It should be noted that you chose to use none of these techniques. The use of volatile helps. However, as a minimum, Bloch and others recommend that you should assign the _instance variable to a local variable, rather than use the _instance throughout. The reason for this recommendation is so that you are paying the cost of accessing the volatile object once.