设计模式之单例设计模式

饿汉式

在静态代码块中直接加载进jvm;
缺点:一开始就会被加载进来。

懒汉式

在初始化时判断是否已经被初始化
缺陷:若多线程初始化则会被重复初始化

双重判断加同步锁

在INSTANCE上加voliate 防止代码重排序
避免在未初始化时就被引用

在同步代码块时加synchronized,保证一个线程可以获得锁并进行初始化;

静态内部类单例

避免使用了同步锁,通过jvm内部的机制保证了线程安全(类加载只能一次)

枚举单例

最完美的单例
可以防止反序列化
为什么可以防止反序列化?因为反序列化依赖于类的构造函数,而枚举单例不存在构造函数

你可能感兴趣的:(设计模式之单例设计模式)