意图:保证一个类仅有一个实例,并提供一个访问它的全局方法。
public class Singleton{
private static Single instance;
private instance(){};
public static Singleton getInstance(){
if(instance==null) instance=new Singleton();
return instance;
}
此情况只适合单线程情况。
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class)
if(instance==null)
instance =new Singleton()
}
return instance;
}
有人可能想把synchronized 加入到 getInstance 方法外面但是这回成为严重的性能瓶颈。
此实现不能满足java情况因为第二个 判断会被优化掉。
可以给出一下java实现
public class Singleton {
private static class Instance{
static final Singleton instance=new Single();
}
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
return Instance.instance;}
Instance 是内部类 只被实例化一次。。。。。。。。。所以次解决方案可行。
}
}
}
public class Singleton{
private static Singleton instance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;}
}
可行 Singleton 只被装载一次