我正在尝试为下面的类实现Singleton模式。我应该随时在JVM中只有类SingletonClass的单个实例。

下面的代码是否满足Singleton模式?请提供您的建议。

public class SingletonClass {

    private static SingletonClass cache = null;
    private static final Object LOCK = new Object();


    // creates one single instance of the class
    public static SingletonClass getInstance() {
        if (cache == null) {
            synchronized (LOCK) {
                if (cache == null) {
                    cache = new SingletonClass();
                }
            }
        }

        return cache;
    }

    public static void main(String[] args) {

        SingletonClass.getInstance();
    }
}

最佳答案

有一篇不错的文章介绍了实现单例模式的不同方法,包括您的方式:
Reg's Tech article about Singleton

如本文所述,您应该(如果您希望模式是100%线程安全的)还应将SingletonClass字段声明为volatile。另外,您不需要对象作为锁。只需使用synchronized(SingletonClass.class)

09-05 15:32