我正在阅读一篇讨论单例何时不是单例的博客。
在作者试图解释的一种情况下,在 Singleton 上实现双重检查锁定也可能会失败。
// Double-checked locking -- don't use
public static MySingleton getInstance() {
if (_instance==null) {
synchronized (MySingleton.class) {
if (_instance==null) {
_instance = new MySingleton();
}
}
}
}
对于上面的代码块作者说:
“在这种情况下,我们打算避免每次调用方法时都要去抢单例类的锁的开销。只有当单例实例不存在时才去抢锁,然后再检查实例是否存在万一另一个线程在当前线程之前通过了第一次检查。”
有人可以帮我解释这到底是什么意思吗?