我已经阅读了关于双重检查锁定修复永远不起作用的所有内容,也不喜欢延迟初始化,但是修复遗留代码并解决此类问题是很诱人的。
这是我的示例: 私有 int timesSafelyGotten = 0; 私有 Helper helper = null;
public getHelper()
{
if (timesSafelyGotten < 1) {
synchronized (this) {
if (helper == null) {
helper = new Helper();
} else {
timesSafelyGotten++;
}
}
}
return helper;
}
这样,同步代码必须在创建助手时运行一次,在第一次获取它时再运行一次,因此理论上timesSafelyGotten不能在创建助手的同步代码释放锁之后增加,而且助手必须完成初始化。
我认为没有问题,但它太简单了,似乎太美好了,你觉得呢?
Caleb James DeLisle