有时候有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。
如果创造多个实例,就会导致许多问题,比如:占用过多资源、不一致的结果等。
因此,需要保证整个应用中某个实例有且只有一个。
懒汉模式
public class Singleton2 {
//1.将构造方式私有化,不允许外边直接创建对象
private Singleton2(){
}
//2.声明类的唯一实例,使用private static修饰
private static Singleton2 instance;
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
饿汉模式
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例,使用private static修饰
private static Singleton instance=new Singleton();
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance(){
return instance;
}
}
二者区别(关于以上代码线程安全性,严格来讲并非如此)
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全;懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。