众所周知,单例模式是最常用的设计模式了。Spring容器中所管理的类的实例默认也是单例的,虽然单例看似简单,但也是有不少需要注意的地方,特别是在多线程环境下。基础的单例模式实现方式就不赘述了,我们来看看为什么采用了双重同步锁的懒汉式单例还是线程不安全的。示例代码如下:
package com.huawei.l00379880.mythread.Chapter04SecureObject.Section2And3SafePublish; /*********************************************************** * @note : 双重同步锁懒汉式单例--线程不安全 * @author : l00379880 梁山广 * @version : V1.0 at 2019/8/29 18:39 ***********************************************************/ public class Singleton1 { /** * 单例对象 */ private static Singleton1 instance = null; public Singleton1() { } public static Singleton1 getInstance() { // 双重检查机制 if (instance==null){ // 同步锁 synchronized (Singleton1.class){ if (instance==null){ instance = new Singleton1(); } } } return instance; } public static void main(String[] args) { instance = new Singleton1(); } }