public class Singleton {
private static class InstanceHolder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return InstanceHolder.INSTANCE;
}
private Singleton() {}
}
This initializes the INSTANCE
variable on the first call to Singleton.getInstance()
, taking advantage of the language's thread safety guarantees for static initialization without requiring additional synchronization.
This implementation is also known as Bill Pugh singleton pattern. [Wiki]