定义:确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡驱动等都经常被设计为单例的。这些应用都或多或少有资源管理器的功能,避免出现不一致的状态,比如两个Printer
对象同时向打印机发送打印指令。
线程安全:单例对象内的实例变量被多线程共享,所以推荐使用无状态对象(没有实例变量的对象,不能保存数据,是不变类,线程安全)。
饿汉式:
class Singleton {
private static Singleton s = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return s;
}
}
饿汉式唯一的缺点:实例的初始化是在类加载时进行的,如果初始化太早,会造成资源浪费。
类加载的时机:
1.new
一个对象时;
2.使用反射创建它的实例时;
3.子类被加载时,如果父类还没有加载,就先加载父类;
4.jvm
启动时执行主类,会先被加载;
懒汉式: