从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