Pattern for lazy thread-safe singleton instantiation in java

the lazy thread-safe singleton
instantion is kinda not easy to
understand to every coder

No, it’s actually very, very easy:

public class Singleton{
    private final static Singleton instance = new Singleton();
    private Singleton(){ ... }
    public static Singleton getInstance(){ return instance; }
}

Better yet, make it an enum:

public enum Singleton{
    INSTANCE;
    private Singleton(){ ... }
}

It’s threadsafe, and it’s lazy (initialization happens at class loading time, and Java does not load classes until they are are first referred).

Fact is, 99% of the time you don’t need lazy loading at all. And out of the remaining 1%, in 0.9% the above is perfectly lazy enough.

Have you run a profiler and determined that your app belings to the 0.01% that really needs lazy-loading-at-first-access? Didn’t think so. Then why are you wasting your time concocting these Rube Goldbergesque code abominations to solve a non-existing problem?

Leave a Comment