饿汉式
在静态代码块中直接加载进jvm;
缺点:一开始就会被加载进来。
懒汉式
在初始化时判断是否已经被初始化
缺陷:若多线程初始化则会被重复初始化
双重判断加同步锁
在INSTANCE上加voliate 防止代码重排序
避免在未初始化时就被引用
在同步代码块时加synchronized,保证一个线程可以获得锁并进行初始化;
静态内部类单例
避免使用了同步锁,通过jvm内部的机制保证了线程安全(类加载只能一次)
枚举单例
最完美的单例
可以防止反序列化
为什么可以防止反序列化?因为反序列化依赖于类的构造函数,而枚举单例不存在构造函数
网友评论