我正在尝试为下面的类实现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)