java - 避免使用 volatile 修复

标签 java concurrency sonarqube volatile pmd

PMD 规则集中定义的规则之一是:“避免使用 Volatile”,它解释了“不推荐使用修饰符 volatile”。此规则在 PMD 的有争议的规则集中被提及。
在我的团队中,我们在各种模块上配置了 Sonar,这些模块间接具有来自 PMD 的规则集,因此任何使用 volatile 弹出消息都是严重警告。

问题是我们为什么要使用 volatile?
volatile 关键字用于 boolean 变量以控制外部 session 的状态。此状态可跨多个线程访问,因此要知道状态是 UP 还是 DOWN,将其维护为 boolean volatile 变量,以便跨多个线程共享可见性。

我的问题是如何修复此 Sonar 警告?
一种解决方案是从规则集中删除规则,这是不允许的,因为:首先,不建议这样做,因为这些规则构成了从 PMD 规则集中定义的基本准则,其次,我组织中的 SONAR 服务器是中央服务器,由所有球队。因此是不允许的。

另一种解决方案是通过使用一些注释来忽略 Sonar 警告,这在基本规则集上也是不推荐的。

谁能建议我们如何在代码中修复此 Sonar 警告?

提前致谢。

最佳答案

首先,此规则并不表示代码中存在一般问题 - volatile 是一个非常好的关键字,没有任何问题。这就是为什么它是 controversial rule .

另一方面,使用它确实是一种高级技术,需要您知道自己在做什么。在某些情况下,您会知道维护您的代码的人员没有足够的 Java 知识。在这种情况下,规则可能有意义。

要满足您的情况的规则,请使用 AtomicBoolean .

关于java - 避免使用 volatile 修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393450/

相关文章:

java - 显示记录的用户数据java

java swing并发在JTextArea中循环显示文本

java - 什么是 "incompletely constructed object"?

sonarqube - 如何在 Sonar 中创建新规则

java - Java中哪个线程负责什么

java - ActiveMQ 将过期消息移动到与失败消息不同的队列

java - LinkIN API OAuth 在 ubuntu 中不起作用

java - Java固定大小的线程池和所有CPU内核的最佳用法

java - Sonar 问题 : "Overide the "equals"method in this class

maven - Sonar 跳过除根模块之外的所有模块