1 饿汉式
优点:没有加任何的锁、执行效率比较高,在用户体验上来说,比懒汉式更好。
缺点:类加载的时候就初始化,不管用与不用都占着空间,浪费了内存。
2 懒汉式
1)双重锁式
优点:延迟加载,双重检查加锁模式线程安全
缺点:不加同步锁的懒汉式是线程不安全的
2)内部类单例
优点:懒汉式,利用内部类加载机制,没有同步锁,效率高
3 注册式单例
1)容器注册式
优点:方便管理多个单例类
缺点:存在线程安全问题,需加同步锁
2)枚举
反编译class文件得到下面的代码:
jvm自动生成一个饿汉式的单例对象,然后把对象注册到$VALUES数组里;valueOf(String name)方法其实就是注册模式
优点:枚举类是jdk防反射的,同时防止对象序列化破坏单例,是一个最佳的实现方式。
4 ThreadLoacal 单例模式
优点:天然线程安全
缺点:多线程不能同步
5 UML