静态方法
1 | // 这种方法,多线程下会有并发问题 |
加上内置锁
1 | // 这种方法的问题在于每次都需要同步,非常耗性能 |
再加一层null判断
1 | // 这种就是最典型的double-check单例 |
加volatile关键字
1 | // volatile 可以禁止指令重排 |
类加载时就初始化
1 | // 类加载时初始化就没有上面同步的问题 |
控制反射序列化情况
1 | // 添加readResolve方法防止反射问题 |
静态内部类
1 | // 现在使用最为普遍的一种方式,清晰简单 |
枚举类型
1 | // 单元素的枚举类型已经成为实现Singleton的最佳方法 |