文档章节

sonar报错volatile

开源小菜鸟2333
 开源小菜鸟2333
发布于 09/21 00:03
字数 527
阅读 13
收藏 0

问题发生

原先代码如下:

//认证授权码
private static volatile String AUTHORIZATION_CODE = "init";

git push 之后,sonar认为这是个bug检测报告截图如下: sonar报错内容

分析排查

解释说明:

Marking an array volatile means that the array itself will always be read fresh and never thread cached, but the items in the array will not be. Similarly, marking a mutable object field volatile means the object reference is volatile but the object itself is not, and other threads may not see updates to the object state.

This can be salvaged with arrays by using the relevant AtomicArray class, such as AtomicIntegerArray, instead. For mutable objects, the volatile should be removed, and some other method should be used to ensure thread-safety, such as synchronization, or ThreadLocal storage.


中文翻译如下:

标记数组volatile意味着数组本身将始终被新鲜读取并且永远不会被线程缓存,但数组中的项目将不会。 类似地,标记可变对象字段volatile表示对象引用是易失性但对象本身不是,并且其他线程可能看不到对象状态的更新。

这可以通过使用相关的AtomicArray类(例如AtomicIntegerArray)来修复数组。 对于可变对象,应该删除volatile,并且应该使用其他一些方法来确保线程安全,例如同步或ThreadLocal存储。

从搜索引擎上寻找答案,得到部分解释说明如下:

volatile关键字对于基本类型的修改可以在随后对多个线程的读保持一致, 但是对于引用类型如数组,实体bean,仅仅保证引用的可见性,但并不保证引用内容的可见性。

即使使用volatile关键字修饰string,也不能保证修改后的数据会立即对其他的多个线程保持一致

解决问题

 //认证授权码
private static AtomicReference<String> ATOMIC_AUTHORIZATION_CODE = 
	new AtomicReference<>();

其赋值与取值,则采用set()、get() 方法来完成。

改动后重新git push 之后,sonar中的bug消除。问题解决

© 著作权归作者所有

开源小菜鸟2333
粉丝 18
博文 42
码字总数 31797
作品 0
杭州
私信 提问
Sonar Java 5.9 发布,新增 29 条规则

Sonar Java 5.9 发布了,Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、...

h4cd
2018/11/15
2K
0
启动Sonar Runner报错,Fail to download libraries from server

我自己弄得一个springboot项目,项目是ok的,现在想着学习一下sonar,但是在启动sonar-runner的时候报错Fail to download libraries from server,哪里配置错误了吗? springboot是1.4.4 son...

灵雨既零
2018/04/16
692
1
SonarScanner运行报错:无法连接数据库

@Yashin 你好,想跟你请教个问题:我按照该教程学习Sonar,但是最后一步利用SonarScanner分析工具分析源代码时报错,我在同事电脑按照这个步骤是没有问题的,且我使用的Java环境软件版本均一...

LiuMiller
2017/05/16
3.5K
6
java maven项目使用sonar审核代码

一、pom增加插件 <plugin><groupId>org.sonarsource.scanner.maven</groupId><artifactId>sonar-maven-plugin</artifactId><version>3.1.1</version></plugin> 二、下载SonarQube 7.1 https......

八戒八戒八戒
2018/06/27
399
0
sonar 启动报错

自己部署了一个sonar环境,数据库用的是oracle11g,jdk是jdk1.7.0_71版本。 sonar.properties的配置修改如下: sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:...

sukora
2014/12/02
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
57分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
7
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
2
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部