1、单例模式的定义
单例模式顾名思义就是一个类只能拥有一个实例,这样保证对象的一致性。
2、单例模式的特点
1、单例类只能有一个实例
2、单例类必须自己创建自己的唯一实例
3、单例类必须给其他的对象提供这个实例
3、线程安全问题
1、首先不管是饱汉式还是饿汉式的单例模式,都必须将对象的构造方法进行私有化,避免外部调用时能实例化对象(这里不考虑反射的情况,对于反射可以直接暴力访问)
2、饿汉式单例模式,由于在类加载时就已经初始化对象,所以只会有一个实例。
3、饱汉式单例模式,在使用时才去实例化对象,这样就需要使用锁的机制来避免多线程造成的多个实例。
4、实现单例模式的方式
1、饿汉式单例(立即加载方式)
public class Singleton{
//私有化构造方法,避免外部访问
private Singleton(){}
//初始化静态对象
private static Singleton singleton = new Singleton();
//静态工厂方法,供外部进行调用
public static Singleton getInstance(){
return singleton;
}
}
2、饱汉式单例(使用synchronized同步锁)
public class Singleton{
//构造方法私有化
private Singleton(){}
//声明静态对象
private static Singleton singleton = null;
//静态工厂方法,供外部调用
public static Singleton getInstance(){
//校验,如果没有创建实例,则需要创建
if(singleton == null){
//进行悲观锁的控制,避免多线程的情况
synchronized(Singleton.class){
//校验
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}