设计模式-单例模式之双重检查锁

单例模式的实现有两种,饿汉式以及懒汉式。

懒汉式在多线程的情况下会遇到线程安全问题,导致单例模式失效。

解决办法是增加锁来防止多线程情况下重复初始化。同时还是要避免每次请求都加锁的情况,所以会在加锁的同时,增加检查,防止每次都加锁操作,增加吞吐量。然而JVM会根据自身优化,对部分指令进行重排,这种情况下,会导致引用失效。所以需要通过增加关键字 volatile 来防止指令重排。

最终DEMO如下:

public class Singleton {
    private volatile static Singleton uniqueSingleton;

    private Singleton() {
    }

    public Singleton getInstance() {
        if (null == uniqueSingleton) {
            synchronized (Singleton.class) {
                if (null == uniqueSingleton) {
                    uniqueSingleton = new Singleton();
                }
            }
        }
        return uniqueSingleton;
    }
}

转自:https://blog.csdn.net/e31006/article/details/85861791

猜你喜欢

转载自www.cnblogs.com/kinglovelqn/p/11962836.html