本文JDK源码基于JDK17
饿汉式
使用static
和final
修饰实例变量,线程安全。但是可以被反射和反序列化破坏,以及如果一直不用会浪费内存。
基本实现
JDK中的饿汉式单例模式
枚举
简单,可以避免被反射和反序列化破坏。可以通过Singleton.INSTANCE
直接调用。
基本实现
JDK中的枚举单例模式
双重检测锁(DCL)懒汉式
两次检查保证只调用一次创建对象的方法,提高了效率。
基本实现
JDK中的DCL单例模式
静态内部类
基本实现
利用jvm底层的类装载机制保证线程安全。
JDK中的静态内部类单例模式
不推荐使用的实现方式
线程不安全的懒汉式
使用同步方法的懒汉式
效率非常低。
单检测锁懒汉式
线程不安全。
参考