2017-01-02 22 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同步系統有很高的熟練度,一直導致死鎖的代碼路徑以及對所有可能排列的熟悉程度,以至於人們可以在調試環境之外推斷它。這不是一個成功的好方法。