Guarded Blocks Java中的“巨大的bug”

时间:2017-01-02 10:50:18

标签: java java.util.concurrent

IBM教程5 things you didn't know about ... java.util.concurrent, Part 1指出Java tutorial Guarded blocks示例包含“巨大的错误”,但未指定它:

  

错误观看!

     

顺便说一句,如果您发现Guarded Blocks包含一个巨大的错误,那么您是对的 - 如果开发人员在main()内部的Drop实例上进行同步会发生什么?

谁是对的?

如果在Java教程中已经修复了错误,那么它发生在2010年5月到2011年11月之间,因为代码在WebArchive中看起来很相似。

1 个答案:

答案 0 :(得分:2)

上面的答案(Artur和Gedrox)是正确的 - 它违反封装以在drop对象本身上进行同步,因为任何人(来自外部)也可以获取该监视器,从而完全破坏信令机制。 / p>

我在相当长一段时间没有看过Java Tutorial代码,但我记得在撰写文章时看到它。如果他们修好了,就在我看了之后。

至于这是否是一个“巨大的虫子”,我坚持认为它是;应该避免任何可能破坏同步方案的事情,因为跟踪这个问题需要非常高的Java同步系统熟练程度,一直导致死锁的代码路径,以及对所有可能的排列的熟悉程度,以便人们可以在调试环境之外解释它。这不是一个成功的好方法。