立即加载/"饿汉模式"
什么是立即加载
立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化,在调用方法前实例已经被创建了.利用getInstance()获得一个对象.
延迟加载/"懒汉模式"
什么是延迟加载
延迟加载就是在调用get()方法时实例才被创建,常见的实现办法就是在get()方法中进行new实例化,在调用方法时实例才被创建.利用get()获得一个对象.
延迟加载/"懒汉模式"的缺点
在多线程环境中,使用get()方法多次实例化,取得的不是同一个对象,其hashCode不相同.
延迟加载/"懒汉模式"的解决方案
1.声明synchronized关键字
造成错误的原因:多个线程可以同时进入getInstance()方法;
解决办法:对getInstance()方法声明synchronized关键字为同步方法.
此方法缺点:方法运行效率非常低下,方法是同步运行的,下一个线程想要取得对象,则必须等上一个线程释放锁之后才可以继续执行.
2.使用DCL双检查锁机制
双检查锁就是在同步代码块调用之前检查一遍,载再在同步代码块内部再检查一遍。双重保险
使用静态内置类实现单例模式
序列化与反序列化的单例模式实现
使用static代码块实现单例模式
使用enum枚举数据类型实现单例模式
转载请注明原文地址: https://www.6miu.com/read-51991.html