[转] 如何正确地写出单例模式

你真的了解单例吗?

这两天在看 《多处理器编程的艺术》    (英文版)  里面提到懒汉式单例模式编写的不严密性。由此我想梳理下单例模式这个问题到底涉及哪些细节。于是找到文章一篇:

原文地址: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创建时是如何做的?待续

原文地址:https://www.cnblogs.com/simoncook/p/5617397.html