3

发行说明中,checkstyle 删除了双重检查锁定检查。

我很难理解为什么。他们不仅在发行说明中而且在问题跟踪器中都回答了这个问题:

删除了 DoubleCheckedLocking 检查,就像在 Java 5(及更高版本)中一样,使用 volatile 关键字解决了这个问题。

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

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

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

4

1 回答 1

8

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

这并不意味着使用volatile就是解决方案。但是在 1.5 Java Memory Model 被重新定义,使得volatile足够了。

也可以看看

于 2012-11-20T17:50:23.400 回答