双重检验锁模式
双重检验锁模式(double checked locking pattern),是一种使用同步块加锁的方法。程序员称其为双重检查锁,因为会有两次检查
instance == null,一次是在同步块外,一次是在同步块内。为什么在同步块内还要再检验一次?因为可能会有多个线程一起进入同步
块外的 if,如果在同步块内不进行二次检验的话就会生成多个实例了。
代码实现:
package com.jn.pro;
/*
* 双重校验锁
*/
public class SingletonClass2 {
private static volatile SingletonClass2 instance;//声明成 volatile
private SingletonClass2(){
}
public static SingletonClass2 getInstance(){
if(instance == null){
synchronized (SingletonClass2.class) {
if(instance == null){
instance = new SingletonClass2();
}
}
}