2012-03-26 48 views
5

當我讀了「在實踐中Java併發」 C03,我被下面的程序混淆輸出可能爲零,但我已經嘗試了很多次,輸出始終是42. 所有的原因是我太幸運了?Java線程的知名度

+1

此問題與[this one]完全相同(http://stackoverflow.com/questions/1919469/question-about-java-concurrency-in-practice-example)。 – xea 2012-03-26 08:55:01

回答

9

所有的原因是我太幸運了?

不一定。它將取決於您的處理器架構和JVM實現。這是微妙的記憶模型問題的問題之一:它們可能很難在野外繁殖。

+0

好的,我明白了。謝謝 – 2012-03-26 07:36:36

+0

我不明白。在數字設置爲42之前,攝像頭準備狀態如何?也就是說,如果沒有其他線程正在改變它們。 – Burkhard 2012-03-26 08:31:08

+1

@Burkhard:假設我在不同的郵箱中向同一個人發了兩封信。第二次發佈的內容實際上可能會在首先發布的內容之前到達收件人。線程之間的內存可見性也是如此。 – 2012-03-26 08:41:54