这个java:S3077有什么问题吗?
我有一个类,它的字段只能懒散地初始化这个java:S3077有什么问题吗?,java,volatile,lazy-initialization,double-checked-locking,sonarcloud,Java,Volatile,Lazy Initialization,Double Checked Locking,Sonarcloud,我有一个类,它的字段只能懒散地初始化 class一些{ public部分getPrevious(){ { 最终结果=先前结果; 如果(结果!=null){ 返回结果; } } (这个){ 如果(上一个==null){ previous=computePrevious(); } 返回上一个; } } //所有字段都在构造函数中最终初始化 私有最终字符串名; //这是一个延迟初始化的自我类型值。 一些以前的私人公司; } 现在SonaCloud一直在抱怨java:S3077 使用线程安全类型;添加
class一些{
public部分getPrevious(){
{
最终结果=先前结果;
如果(结果!=null){
返回结果;
}
}
(这个){
如果(上一个==null){
previous=computePrevious();
}
返回上一个;
}
}
//所有字段都在构造函数中最终初始化
私有最终字符串名;
//这是一个延迟初始化的自我类型值。
一些以前的私人公司;
}
现在SonaCloud一直在抱怨java:S3077
使用线程安全类型;添加“volatile”不足以使此字段线程安全
- 代码有什么问题吗
- 我可以忽略它吗
- 使用原子引用如何?这是不是太过分了
Other
是不可变的,那么就S3077而言,它是“线程安全类型”
如果它是一个设计供多个线程使用的类,例如ConcurrentHashMap
,那么它也是一个“线程安全类型”
如果您在谷歌S3077上搜索,您可以找到回答您问题的有用讨论,例如是
其他的
可变的吗?如果是这样,如规则描述中所述,其他线程可能无法看到共享实例中的更新。看来这是个合理的问题。