java – Double-Checked Locking从checkstyle中消失了 – 为什么?

release notes开始,checkstyle删除了Double-Checked锁定检查.

我很难理解为什么.他们不仅在发行说明中回复了这个问题,而且在issue tracker中也回复了这个问题:

Removed the DoubleCheckedLocking check, as in Java 5 (and beyond),
using the volatile keyword addresses the issue.

我假设,如果checkstyle正在删除此警告,那是因为它不再有用.也就是说,错误将不再发生或另一个警告完成工作.但

我不明白为什么在Java 5中不再发生这样的错误,或者它是如何被另一个警告补充的.有人可以解释一下吗?

编辑:我理解添加volatile关键字如何解决问题.我担心的是:这个警告不是值得的吗?我正在考虑程序员使用上述锁定模式的情况,但忘记声明变量volatile. checkstyle还不应警告它吗?

解决方法:

描述几乎解释了这个决定.从Java 1.5开始,您可以使用volatile实例变量.它将正确处理内存可见性问题,使用双重检查锁定不再是一个错误.

这并不意味着使用volatile是解决方案.但是在1.5内存中重新定义了Java内存模型,使得volatile变得充分.

也可以看看

> The “Double-Checked Locking is Broken” Declaration

上一篇:java-Gradle Checkstyle插件控制台输出


下一篇:java – 检测作为参数传递的对象的更改值