多线程下单例

Posted xu06123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程下单例相关的知识,希望对你有一定的参考价值。

1.什么是单例模式?

             单例模式是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种模式方法。

    单例的特点: 

            在任何情况下,单例类永远只有一个实例存在   单例需要有能力为整个系统提供这一唯一实例  

 

 饿汉和懒汉单例

        1.饿汉式单例是指在方法调用前,实例就已经创建好了

                        技术分享图片

    2.  懒汉式单例是指在方法调用获取实例时才创建实例,因为相对饿汉式显得“不急迫”,所以被叫做“懒汉模式”

技术分享图片

 

 

 

3.使用静态内置类实现单例模式

DCL解决了多线程并发下的线程安全问题,其实使用其他方式也可以达到同样的效果

技术分享图片

 

 以上代码就是使用静态内置类实现了单例模式,这里将前面验证多线程下执行情况的MyThread类放入到org.mlinge.s06包下运行

 

4.Double Check Locking 双检查锁机制

为了达到线程安全,又能提高代码执行效率,我们这里可以采用DCL的双检查锁机制来完成

技术分享图片

5.序列化与反序列化的单例模式实现

    静态内部类虽然保证了单例在多线程并发下的线程安全性,但是在遇到序列化对象时,默认的方式运行得到的结果就是多例的。

      技术分享图片

序列化与反序列化测试代码:

技术分享图片

 

以上是关于多线程下单例的主要内容,如果未能解决你的问题,请参考以下文章

Servlet 单例多线程详解

Servlet 单例多线程

单例模式双重检查(DCL)引发的多线程问题

既然spring中注入用单例,为了解决多线程安全问题,还得用theardlocal为每个线程创建共

Java多线程下单例

多线程下单例模式示例(synchronized)