【发布时间】:2012-11-20 17:46:56
【问题描述】:
从release notes 中,checkstyle 删除了双重检查锁定检查。
我很难理解为什么。他们不仅在发行说明中回复了这个问题,还在issue tracker:
删除了 DoubleCheckedLocking 检查,与 Java 5(及更高版本)一样, 使用 volatile 关键字解决了这个问题。
我假设,如果 checkstyle 正在删除此警告,那是因为它不再有用。也就是说,要么错误不再发生,要么另一个警告完成了这项工作。但是
我不明白为什么在 Java 5 中不会再发生这样的错误,或者它是如何被另一个警告补充的。有人愿意解释一下吗?
编辑:我了解添加 volatile 关键字如何解决问题。我担心的是:这个警告难道不值得吗?我正在考虑程序员使用上述锁定模式但忘记声明变量 volatile 的情况。 checkstyle 不应该还警告它吗?
【问题讨论】:
-
特别是:“[在 Java 5 之前] 虽然 volatile 变量的读取和写入不能与其他 volatile 变量的读取和写入重新排序,但它们仍然可以通过读取和写入重新排序非易失性变量".
标签: java checkstyle double-checked-locking