什么是双重检查锁?
双重检查锁(Double-Check Locking),顾名思义,通过两次检查,并基于加锁机制,实现某个功能。
要理解什么是双重检查锁,我们从常见的单例模式说起。看第一个例子:
上图中的单例模式一看就知道存在线程问题,如果两个线程:线程A和线程B,同时访问该类,线程A访问到第6行,在还没有实例化完成的时候,线程B访问到第5行,此时也会判断到instance=null,同样会执行实例化的代码,那么线程A和线程B就都会创建一个Singleton实例。
怎么解决上面出现的多线程并发访问导致的问题呢?
加锁!大家都知道,加锁是解决并发访问的方案,于是对代码进行修改,修改后如下:
基于锁的相关特性,