1.单例模式分类:
懒汉式单例、饿汉式单例、登记式单例(不常用)。
2.单例模式的特点:
单例类只能有一个实例;
单例类必须自己创建自己的唯一实例;单例类必须给所有其他对象提供这一实例;
3.单例模式示例代码:
饿汉式
//在类初始化时,已经自行实例化
public class Hungry {
private Hungry() {}
private static final Hungry hungry = new Hungry();
//静态工厂方法
public static Hungry getInstance() {
return hungry;
}
}
懒汉式
//第一次调用方法时,才实例化对象
public class Lazy {
private Lazy() {}
private static Lazy lazy=null;
//静态工厂方法
public static Lazy getInstance(){
if (lazy == null) {
lazy = new Lazy();
}
return lazy;
}
}
3.线程安全性
饿汉式:在类创建的同时就已经实例化好了一个静态的对象,所以是线程安全的。
懒汉式:创建对象过程中存在并发状况,所以是线程不安全;
解决办法:1.在方法上加同步(synchronized);
2.双重检查锁定;
3.调用静态内部类的方法