我已经阅读了有关双重检查锁定修复如何从不工作的所有内容,并且我不喜欢延迟初始化,但是能够修复遗留代码会很好,而且这样的问题太诱人了,无法尝试解决。
这是我的例子: private int timesSafelyGotten = 0; 私人助手 helper = null;
public getHelper()
{
if (timesSafelyGotten < 1) {
synchronized (this) {
if (helper == null) {
helper = new Helper();
} else {
timesSafelyGotten++;
}
}
}
return helper;
}
这样,同步代码必须运行一次以创建帮助程序,并且在第一次获取它时运行一次,因此理论上 timesSafelyGotten 不能递增,直到创建帮助程序的同步代码释放锁并且帮助程序必须完成初始化。
我认为没有问题,但它是如此简单,看起来好得令人难以置信,你怎么看?
迦勒·詹姆斯·德莱尔