resource = new Resource();
}
}
}return resource;
}

public synchronized Resource getResource()...{
if (resource == null)...{
resource = new Resource();
}
return resource;
}
这段代码的目的是对resource延迟初始化。但是每次访问的时候都需要同步。为了减少同步的开销,于是有了双重检查模式。
在java中双重检查模式无效的原因是在不同步的情况下引用类型不是线程安全的。对于除了long和double的基本类型,双重检查模式是适用的。比如下面这段代码就是正确的: