1.单例模式简介
单例类全局只能有一个实例
单例类必须自己创建自己的唯一实例
单例类必须给所有其他对象提供这一实例
单例类构造函数是私有的
2.单例模式主要应用
可以避免一个全局使用的类频繁地创建与销毁
3.单例模式分类
1.饿汉式
类加载时对象就被创建,一直在内存中,如果一直不使用,该对象仍在,会存在内存浪费问题
public class HungryDemo {
private HungryDemo(){}
private static HungryDemo hungryDemo = new HungryDemo();
public static HungryDemo getInstance(){
return hungryDemo;
}
}
2.懒汉式
public class LazyDemo {
private LazyDemo(){}
private static LazyDemo lazyDemo;
public LazyDemo getInstance(){
//多线程环境下会创建多个对象
if (lazyDemo == null){
lazyDemo = new LazyDemo();
}
return lazyDemo;
}
}
双重检查锁解决线程懒汉式的线程安全问题
public class LazyDemo {
private LazyDemo(){}
private static LazyDemo lazyDemo;
public LazyDemo getInstance(){
//第一次检查,如果instance不为null,不需要抢占锁,直接返回对象
if (lazyDemo == null){
//加锁
synchronized (LazyDemo.class){
//第二次检查
if (lazyDemo == null){
lazyDemo = new LazyDemo();
}
}
}
return lazyDemo;
}
}