猿问

通过 final 关键字来实现 双重检查(DCL) 时,为什么 局部变量 是必须的?

在     双重检查锁定(DCL)的wiki    中,对于DCL提供了一种通过final关键字来实现的方式,源码如下:
publicclassFinalWrapper{
publicfinalTvalue;
publicFinalWrapper(Tvalue){
this.value=value;
}
}
publicclassFoo{
privateFinalWrapperhelperWrapper;
publicHelpergetHelper(){
FinalWrapperwrapper=helperWrapper;
if(wrapper==null){
synchronized(this){
if(helperWrapper==null){
helperWrapper=newFinalWrapper(newHelper());
}
wrapper=helperWrapper;
}
}
returnwrapper.value;
}
}
同时,文章中有如下说明:Thelocalvariablewrapperisrequiredforcorrectness.
请问一下,为什么这个局部变量wrapper是必须的?我个人认为此变量是可有可无的,还请有识者指点一下。
慕后森
浏览 396回答 2
2回答

叮当猫咪

@rainbow702@FrancisZ这个问题我最近也看了,请教一下二位,你们最终的结论是:Thelocalvariablewrapperisrequiredforcorrectness.是完全不需要的对吗?
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答