场景:用的多,资源消耗大,初始化时间长,需要保持唯一性。如,工具类
条件:反射、序列化、克隆、多线程
1.静态内部类枚举单例 懒汉式
枚举实现单例优势:不会被反射(枚举无newInstance方法)出,实现单例;
无序列化的方法,实现单例;
不支持克隆,实现单例;
枚举劣势:性能差
懒加载,静态内部类,使用到static再初始化
2.容器单例
线程不安全,需要使用者控制
hashtable,线程绝对安全,
concurrenthashmap/hashmap,部分锁定,线程算安全
3.Double check lock + volatile 懒汉式
弊端: 不完全的单例(指令重排),代码不优雅,check麻烦
//加载一个类时,其内部类不会同时被加载。
//一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。
实例:单例
网友评论