【问题标题】:Double-Checked Locking disappeared from checkstyle - why?双重检查锁定从检查样式中消失了-为什么?
【发布时间】:2012-11-20 17:46:56
【问题描述】:

release notes 中,checkstyle 删除了双重检查锁定检查。

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

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

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

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

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

【问题讨论】:

标签: java checkstyle double-checked-locking


【解决方案1】:

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

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

另见

【讨论】:

  • 如果您忘记将实例变量声明为 volatile 以防万一使用这种模式,checkstyle 是否应该仍然警告您?换句话说,如果您忘记将变量声明为 volatile,是否不再值得一个 checkstyle 警告?
  • @Thiago 是的,我认为这不是一个好的决定,但也许根本没有时间修复支票,所以他们决定暂时将其取出。 Java 5 及更高版本需要进行新的检查(这已经是非常标准的了)。
猜你喜欢
  • 1970-01-01
  • 2011-12-12
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多