什么是单例模式
我的认识:单例模式是使一个类只提供一个实例对象供使用,防止多次实例化造成内存的浪费,即使在多线程情况下。
单例模式分类:饿汉和懒汉
饿汉:在一开始类创建的时候就生成一个实例,会占用一些内存
不存在多线程多次创建对象的问题
class Singleton(){
// 构造方法指定为private,使得外部无法实例化这个类
private Singleton(){};
private static final Singleton instance = new Single();
public Singleton getInstance(){
return instance;
}
}
懒汉:只有在使用到这个实例的时候才生成一个对象,需要额外处理多线程问题
存在多线程多次创建对象的问题,需要限制创建对象的线程。
class Singleton(){
// 私有化构造方法
private Singleton(){}
// volatile 保证可见性 static 保证是类对象
private static volatile Singleton instance = null;
public static Singleton getInstance(){
// 首先判断实例是否为null,这里可能有多个线程同时走到这一步
if(instance == null){
// 锁住这个类的静态方法
synchronized(Singleton.class){
// 因为有多个线程按顺序执行到这一步,所以要再次判断,只要第一个线程实例化了一个对象,之后的就不需要再创建对象了。
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
5万+



被折叠的 条评论
为什么被折叠?



