一、引言
在JAVA多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的 开销。双重检查锁定就是延迟 初始化技术。
二、双重检查锁定的由来
在jav进程中,有时候可能 需要推迟一些高开销对象的初始化操作,并且只有在使用这些对象时才进行初始化,此时,程序员可能会采用延迟初始化。还有一个经典的使用场景就是单利模式下的,为了提高性能 ,采用双重检查锁定模式。但是在使用的过程中我们需要一些技巧,否则很容易出现问题。
上面代码在多线程环境下,我们很容易出现问题,所以改进代码。
由于对getInstance()方法做了同步处理,synchronized将导致性能的开销。如果 getInstance()方法被多个线程频繁调用,将会导致程序执行性能下降。因此,为了提高性能,聪明的程序员想出了一个很好技巧: 双重检查锁定(DCL).继续优化代码
这段代码看起来非常完美,但是这是一个错误的优化,在线程执行到第4行代码的时候,