2017-01-02 23 views
0

IBM教程5 things you didn't know about ... java.util.concurrent, Part 1指出Java tutorial Guarded blocks例子包含了一个“巨大的错误”,但没有指定它:“巨​​大的错误”,在保护模块的Java

错误看!

顺便说一句,如果您注意到防护块包含巨大的bug - 如果开发人员在main()内部的Drop实例上同步会发生什么情况?

谁是对的?

如果在Java教程中修复了错误,它发生在2010年5月和2011年11月之间,因为代码在WebArchive中看起来类似。

+0

你为什么不直接问Ted Neward? –

+0

我的猜测是他认为同步公开可用的参考不良做法(因为来自“外部”的人可能会混淆你的逻辑)。我不会把它称为'巨大的错误',尤其是在关于通知的教程代码中... –

+0

@LukasEder,在IBM教程下有同样的问题,没有人回答它。 – Gedrox

回答

2

上面的答案(Artur和Gedrox)是正确的 - 因为任何人(来自外部)都可以获取该监视器,从而完全破坏信号机制,所以它是对封装进行同步的封装违规。

我很久没有看过Java教程代码,但我确实记得在编写文章时看它。如果他们修好了,那是在我看后。至于这是不是一个“巨大的错误”,我支持它的说法;任何可能破坏同步方案的东西都应该避免,因为跟踪这种情况需要对Java同步系统有很高的熟练度,一直导致死锁的代码路径以及对所有可能排列的熟悉程度,以至于人们可以在调试环境之外推断它。这不是一个成功的好方法。