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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转] 如何正确地写出单例模式相关的知识,希望对你有一定的参考价值。

你真的了解单例吗?

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

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

以上是关于[转] 如何正确地写出单例模式的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地写出单例模式

如何正确地写出单例模式

单例写法 转

怎么使用es6 的class 优雅地写出单例模式

单例模式的五种写法

单例模式(转)