双重检查加锁机制,指的是;并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法过后,先检查实例是否存在,如果实例不存在才进入下面的同步锁,这是第一重检查。进入同步块后,再次检查实例是否存在,如果不存在就在同步快中创建一个实例。这样,只需同步一次,从而减少了同步情况下进行判断浪费的时间。
package singleton;
public class Test {
private volatile static Test instance = null;
private Test(){}
public static Test getInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(instance == null){
//同步块,线程安全的创建实例
synchronized(Test.class){
//再次检查实例是否存在,如果不存在创建实例
if(instance==null){
instance = new Test();
}
}
}
return instance;
}
}