你真的了解单例吗?
这两天在看 《多处理器编程的艺术》 (英文版) 里面提到懒汉式单例模式编写的不严密性。由此我想梳理下单例模式这个问题到底涉及哪些细节。于是找到文章一篇:
原文地址:http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/
pdf: 这里
要点:
1. 使用 “双重检验锁”优化性能 [懒汉式]
2. 使用volatile 避免“双重检验锁”中指令重排。且仅仅在1.5之后生效 [懒汉式]
3. 饿汉式 private static final Singleton instance = new Singleton(); 线程安全
4. 静态内部类 static nested class 写法:
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
5. enum的写法
public enum EasySingleton{ INSTANCE; }
“不需要担心double checked locking,而且还能防止反序列化导致重新创建新的对象”
-------------------------------------------------
引发思考。spring的单例bean创建时是如何做的?待续
时间: 2024-10-27 19:09:20