类图
代码
1.懒汉(线程不安全)
1 | class Logger1 { |
2.懒汉(线程安全)
1 | class Logger2 { |
3.饿汉
1 | class Logger3 { |
4.饿汉变种
1 | class Logger4 { |
5.静态内部类
1 | class Logger5 { |
测试类
1 | public class Client { |
总结
参考链接:http://cantellow.iteye.com/blog/838473
优缺点
1.懒汉(线程不安全)
这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。
2.懒汉(线程安全)
线程安全,但是效率很低,99%情况下不需要同步
3.饿汉
基于classloder机制避免了多线程的同步问题,但是有可能调用Singleton的其他方法,就会被初始化,没有真正达到lazy loading的效果
4.饿汉变种
和第三种差不多,只不过采用静态内部类的实现方式
5.静态内部类
真正的lazy loading的单例实现
其他
参考链接中还提到了其他2种实现方式,因在工作中不是特别常用,就不予以说明了
- 枚举
- 双重校验锁