// Lazy Initialization
Public MySingleton{
private static mySingleton = null;
Public Static getInstance(){
if(null == mySingleton ){
mySingleton = new MySingleton();
}
return mySingleton;
}
}
// Eager Initilization
Public MySingleton{
private static mySingleton = new MySingleton();
Public Static getInstance(){
return mySingleton ;
}
}
}
答案 0 :(得分:2)
两者都不正确。您应该遵循Joshua Bloch的“Effective Java”中的示例集,基于枚举解释here。
答案 1 :(得分:2)
随着java向依赖注入的方向发展,我已经看到越来越少的显式单例,如上所述。这是因为当IOC容器实例化一个对象时,它默认为单例。
答案 2 :(得分:2)
首先是尝试优化:
还有更多情况......这应该会给你一个开始。
答案 3 :(得分:0)
你的第一个例子根本不是单身人士。它会在每次调用时返回一个新实例!
那说,“更好”(懒惰与渴望)真的取决于你的情况。懒惰是更复杂的,这是它的主要责任。
答案 4 :(得分:0)
Use an enumeration.
public enum Foo {
INSTANCE;
}
阅读
“这种方法在功能上 相当于公共领域 方法,除了它更多 简洁,提供序列化 机器免费,并提供 反对多重的铁定保证 实例化,即使面对 复杂的序列化或 反思攻击。虽然这个 方法尚未被广泛采用, 单元素枚举类型是最好的 实现单身人士的方法。“
答案 5 :(得分:0)
避免使用单例重复的最佳方法是执行以下操作:
public final MySingleton {
//this will be instantiated at class loading time, thus insuring more than one thread
//won't get separate instances.
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton() {
//empty for this example.
}
public static MySingleton getInstance() {
return INSTANCE;
}
}