Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个java:S3077有什么问题吗?_Java_Volatile_Lazy Initialization_Double Checked Locking_Sonarcloud - Fatal编程技术网

这个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上搜索,您可以找到回答您问题的有用讨论,例如

其他的
可变的吗?如果是这样,如规则描述中所述,其他线程可能无法看到共享实例中的更新。看来这是个合理的问题。