从release notes,checkstyle删除了Double-Checked锁定检查。
我很难理解为什么。他们不仅在发布说明中回复了这个问题,而且还在issue tracker:
中回复了这个问题删除了DoubleCheckedLocking检查,如Java 5(及更高版本), 使用volatile关键字解决问题。
我假设,如果checkstyle正在删除此警告,那是因为它不再有用。也就是说,错误将不再发生或另一个警告完成工作。但是
我不明白为什么在Java 5中不再发生这样的错误,或者它是如何被另一个警告补充的。有人可以解释一下吗?
编辑:我理解添加volatile关键字如何解决问题。我担心的是:这个警告不是值得的吗?我正在考虑程序员使用上述锁定模式的情况,但忘记声明变量volatile。 checkstyle还不应该警告它吗?
答案 0 :(得分:8)
描述几乎解释了这个决定。从Java 1.5开始,您可以使用volatile
实例变量。它将正确处理内存可见性问题,使用双重检查锁定不再是错误。
这并不意味着使用volatile
是解决方案。但在1.5 Java内存模型被重新定义,使volatile
足够。