- 单例模式
public class Singleton { private volatile static Singleton singleton; private Singleton() { } public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
==>为什么要使用双重校验锁?
第一次判断是为了在已经创建单例对象的情况下。避免进入同步代码块,提升效率;
在多线程情况下,线程1进入该单例模式,此时单例对象还没有创建,这时线程2获得了时间片,线程2也进入该单例模式,顺利创建了单例对象,所以需要进行二次校验