单例
一句话总结:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
解释: 他的构造方法一定不能是public,只有一个实例,所以这个实例是当前类的成员变量,静态变量,而后说明我们会有一个方法来向外部提供这个实例
使用场景: 创建对象回消耗资源大量资源的情况,IO,数据库
饿汉模式
直接创建对象,在类加载的时候创建对象,安全但是可能会消耗资源
class Singleons{
private Singleons(){
}
//饿汉模式,在类加载的时候进行实例化
private static Singleons singleons=new Singleons();
public static Singleons getInstance(){
return singleons;
}
}
懒汉模式
class Singleons{
private Singleons(){
}
// TODO 此处是防止两个线程同时判断为空然后创建两个单例
// public synchronized static Singleons getInstance(){
// if (singleons==null){
// singleons=new Singleons();
// }
// return singleons;
// }
//双重检测锁模式,TODO 注意 private volatile static Singleons singleons; 禁止指令重排 可能会创建不成功
private volatile static Singleons singleons;
//1. 分配内存
//2.初始化对象
//3.指向刚分配的地址
public static Singleons getInstance(){
if(singleons==null){
synchronized (Singleons.class){
if (singleons==null){
singleons=new Singleons();
}
}
}
return singleons;
}
}