单例的饿汉模式-只要类一加载该实例就被初始化
这种方式的缺点是该类加载的时候就会实例化一个静态对象,会使启动速度慢。与当前的流行的设计“延迟加载”相悖,我们可以在第一次使用时才初始化类对象。这种适合在小系统中使用。
public class Singleton{
private static Singleton instance=new Singleton();
private Singleton{
}
public static Singleton getInstance{
return instance;
}
}
单例的懒汉模式-只有调用该方法的时候才创建该实例
多线程情况下以下代码不安全
public class Singleton{
private static Singleton instance;
private Singleton{
}
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){
instance=new Singleton();
}
}
return instance;
}
}
可以参考如下博客总结很详细
http://cantellow.iteye.com/blog/838473