单例模式的实现有两种,饿汉式以及懒汉式。
懒汉式在多线程的情况下会遇到线程安全问题,导致单例模式失效。
解决办法是增加锁来防止多线程情况下重复初始化。同时还是要避免每次请求都加锁的情况,所以会在加锁的同时,增加检查,防止每次都加锁操作,增加吞吐量。然而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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:设计模式-单例模式之双重检查锁 - Python技术站