什么是单例?单例就是系统运行过程中有且仅有一个实例存在,
即:一个类只有一个实例--最基本的要求(只提供私有构造器),它必须自己创建这个实例(定义静态的该类的私有对象),它必须自行向整个系统提供这个实例(提供一个静态的公有方法,返回创建或者获取本身的静态私有对象);
单例模式分为饿汉模式和懒汉模式,
饿汉模式:类加载时不创建实例,采用延迟加载的方式,在第一次被调用时才进行实例化
特点:线程不安全,延迟加载
通过同步(synchronized)可以解决线程不安全问题
/**
* 懒汉模式
* 在第一次调用的时候才进行实例化
*/
private static Singleton single;
public static Singleton Singleton(){
if(single==null){
single=new Singleton();
}
return single;
}
}
由于大部分时候不用同步,这个时候就出现看饿汉模式
饿汉模式:在类加载的时候就完成初始化,
特点:线程安全,不具备延迟加载
/**
* 饿汉模式
* 类初始化的时候已经自行实例化
*/
private static Singleton1 single1=new Singleton1();
public static Singleton1 getSingleton1(){
return single1;
}
静态内部类
当类加载时完成加载并不实例化,只有调用的时候才会实例化
private static Singleton singleton;
private Singleton(){
//放置只执行一次的业务代码操作
}
public static class SingletonHelper{
private static final Singleton single=new Singleton();
}
public static Singleton getSingleton(){
singleton=SingletonHelper.single;
return singleton;
}