Already we have a nice article about about problems with double check locking. we will see two nice quick workarounds and its pros and cons . Double-checked locking: Clever, but broken and Double-Checked Locking is Broken . before getting into solution, classic singleton uses the following signature for get instance: public static Resource getResource() { if (resource == null) resource = new Resource(); return resource; } so the above code will only create the new resource object if no instance of resource is found. This mechanism is called lazy loading more preciously need based loading we only load resources if and only if it is required. Benefit associated with this approach is performance improvement, if resource creation is a heavy process and we do not want it to be carried when class is loading t then this classic approach does make sense...