这种单例设计模式正确吗?我的意思是,当对象为静态并且方法已同步时,需要检查该对象是否为null。
public class MySingleton {
int val = 10;
private static final MySingleton singleton = new MySingleton();
private MySingleton() { }
public static synchronized MySingleton getSingleton() {
return singleton;
}
}
最佳答案
您无需使方法同步。在静态初始化程序中初始化变量就足够了。另外,您的val
变量几乎应该是私有的...
当您不希望使用同步方法并且不希望使用静态初始化方法时,通常会使用经过双重检查的锁定模式(带有无效性检查)。 (在我看来,在几乎所有情况下,它都不必要地复杂和脆弱。)
另一种选择是使用一个枚举:
public enum MySingleton {
INSTANCE;
private int val = 10;
// Presumably something to use val
}
使用枚举会增强单例性,甚至在面对序列化时也会正确无误。这也是一种非常简单的方法,不需要实际的代码:)另一方面,我从来没有觉得这是完全正确的...