Java - 单例和基于静态块的类初始化之间的区别是什么?

时间:2016-01-11 18:02:53

标签: java multithreading static singleton static-block

最近我学会了Singleton模式。并且必须实现一个。例如:

public class Singleton {
    private static Singleton instance;

    private InnerObject innerObject; //all functionality is here

    private Singleton() {
        innerObject = new InnerObject();
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    public InnerObjectResult getResult() {
        return innerObject.getResult(); //delegate method call
    }
}

但早些时候我会意识到这一点:

public class Singleton {
    private static InnerObject innerObject;

    static {
        innerObject = new InnerObject();
    }

    public static InnerObjectResult getResult() {
        return innerObject.getResult();
    }
}

因此结果是一样的:innerObject初始化一次,但代码更清晰,我不必担心多线程。我知道这种模式并不依赖于特定语言,可能你不能在其他地方做这样的事情,但我对这种特殊情况感兴趣。非常感谢你!

0 个答案:

没有答案