单例模式主要分为饿汉模式和懒汉模式。主要应用于对象只需要一个实例的情况,比如:配置文件、工具类、线程池、缓存、日志对象等,如果创建出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等等。
1、饿汉模式:
public class Singleton {
private Singleton(){//私有构造器
}
private static Singleton instance=new Singleton();//创建唯一实例,用private static修饰
public static Singleton getInstance(){//提供一个获取实例的方法
return instance;
}
}
instance在类加载时就被实例化了,所以形象的称为"饿汉",它要快速、早些的吃饱(类加载时就吃饱)。
2、懒汉模式:
public class Singleton {
private Singleton(){//私有构造器
}
private static Singleton instance;//声明唯一实例,用private static修饰
public static Singleton getInstance(){//提供一个获取实例的方法
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
当第一次调用getInstance()时才会实例化instance,所以称为"懒汉",什么时候用到什么时候实例化。
两种方式的区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢。线程不安全。
1、饿汉模式:
public class Singleton {
private Singleton(){//私有构造器
}
private static Singleton instance=new Singleton();//创建唯一实例,用private static修饰
public static Singleton getInstance(){//提供一个获取实例的方法
return instance;
}
}
instance在类加载时就被实例化了,所以形象的称为"饿汉",它要快速、早些的吃饱(类加载时就吃饱)。
2、懒汉模式:
public class Singleton {
private Singleton(){//私有构造器
}
private static Singleton instance;//声明唯一实例,用private static修饰
public static Singleton getInstance(){//提供一个获取实例的方法
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
当第一次调用getInstance()时才会实例化instance,所以称为"懒汉",什么时候用到什么时候实例化。
两种方式的区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢。线程不安全。