避免使用易失性修复
Avoid Using Volatile Fix
PMD 规则集中定义的规则之一是:"Avoid using Volatile" 这解释了 "Use of modifier volatile is not recommended" .此规则在 PMD 的有争议的规则集下被提及。
在我的团队中,我们在各种模块上配置了 Sonar,这些模块间接具有来自 PMD 的规则集,因此 volatile 的任何使用都会作为严重警告弹出。
问题是我们为什么要使用 volatile?
volatile 关键字用于布尔变量以控制外部会话的状态。此状态可跨多个线程访问,因此要知道状态是 UP 还是 DOWN,将其维护为布尔易失性变量,以便跨多个线程共享可见性。
我的问题是如何解决这个声纳警告?
一种解决方案是从规则集中删除规则,这是不允许的,因为:首先,不建议这样做,因为这些规则构成了从 PMD 规则集中定义的基本准则,其次,我组织中的 SONAR 服务器是中央服务器,由所有球队。因此是不允许的。
另一个解决方案是通过使用一些注释来忽略声纳警告,这在基本规则集上也是不推荐的。
谁能建议我们如何在代码中修复此声纳警告?
提前致谢。
首先,此规则并不表示代码中存在一般问题 - volatile
是一个非常好的关键字,没有任何问题。这就是为什么它是 controversial rule.
另一方面,使用它确实是一种高级技术,需要您知道自己在做什么。在某些情况下,您会知道,比方说,将维护您的代码的人员将没有足够的 Java 知识。在这种情况下,规则 可能 有意义。
要满足您的情况的规则,请使用 AtomicBoolean。
为什么不用注释来抑制警告?
@SuppressWarnings("PMD.AvoidUsingVolatile")
PMD 规则集中定义的规则之一是:"Avoid using Volatile" 这解释了 "Use of modifier volatile is not recommended" .此规则在 PMD 的有争议的规则集下被提及。
在我的团队中,我们在各种模块上配置了 Sonar,这些模块间接具有来自 PMD 的规则集,因此 volatile 的任何使用都会作为严重警告弹出。
问题是我们为什么要使用 volatile?
volatile 关键字用于布尔变量以控制外部会话的状态。此状态可跨多个线程访问,因此要知道状态是 UP 还是 DOWN,将其维护为布尔易失性变量,以便跨多个线程共享可见性。
我的问题是如何解决这个声纳警告?
一种解决方案是从规则集中删除规则,这是不允许的,因为:首先,不建议这样做,因为这些规则构成了从 PMD 规则集中定义的基本准则,其次,我组织中的 SONAR 服务器是中央服务器,由所有球队。因此是不允许的。
另一个解决方案是通过使用一些注释来忽略声纳警告,这在基本规则集上也是不推荐的。
谁能建议我们如何在代码中修复此声纳警告?
提前致谢。
首先,此规则并不表示代码中存在一般问题 - volatile
是一个非常好的关键字,没有任何问题。这就是为什么它是 controversial rule.
另一方面,使用它确实是一种高级技术,需要您知道自己在做什么。在某些情况下,您会知道,比方说,将维护您的代码的人员将没有足够的 Java 知识。在这种情况下,规则 可能 有意义。
要满足您的情况的规则,请使用 AtomicBoolean。
为什么不用注释来抑制警告?
@SuppressWarnings("PMD.AvoidUsingVolatile")