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.调用静态内部类的方法