设计模式—单例
作用
保证一个类只有一个实例,并且提供一个访问实例的全局访问点
饿汉式
简单实用,推荐使用!
唯一缺点:不管用到与否,类装载时就完成实例化,如果实际没调用,则会造成资源浪费!
懒汉式
什么时候用,什么时候初始化对象
方法锁
在方法上添加synchronized关键字,保证多线程安全,但对性能的影响比较大
双重检查
相比方法锁,通过减小同步代码块的方式提高效率
不加volatile会有什么问题?
实例化的过程
- 分配内存空间
- 执行构造方法,实例化对象
- 把这个对象赋值给这个空间
如果不加volatile,会执行重排序,比如过程变成了132,这个可能导致其它调用拿到的是未完全实例化的对象
静态内部类
通过JVM保证单例,加载外部类时不会加载内部类,这样可以实现懒加载
枚举
不仅可以解决线程同步,还可以防止反序列化