避免使用易失性修复

Dip*_*pta 4 java concurrency volatile pmd sonarqube

PMD 规则集中定义的规则之一是:“避免使用 Volatile”,这解释了“不建议使用修饰符 volatile”。该规则在PMD有争议的规则集下有所提及。
在我的团队中,我们在各种模块上配置了 Sonar,这些模块间接具有 PMD 的规则集,因此任何使用易失性弹出窗口的行为都会被视为严重警告。

问题是我们为什么要使用 volatile?
volatile 关键字用于布尔变量来控制外部会话的状态。该状态可以跨多个线程访问,因此要知道状态是 UP 还是 DOWN,它被维护为布尔易失性变量,以便跨多个线程共享可见性。

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

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

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

提前致谢。

bar*_*uin 5

首先,这条规则并不表明代码中存在一般问题 -volatile是一个非常好的关键字,并且没有任何问题。这就是为什么这是一个有争议的规则

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

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