2011-02-02 121 views
-1

當我讀Java線程的概念,我有看到一個聲明即「當涉及到線程,很少保證」。可任何一個簡要的解釋。Java線程概念

+2

你指的是什麼文件? – 2011-02-02 18:29:41

+0

scjp kathy's sierra book – satheesh 2011-02-02 18:31:34

回答

2

它可能是試圖解釋的事實陳述的順序執行兩個線程不能保證,你不能依靠它即順序可能是一種特殊的方式在一個系統上,可能是在一個完全不同的機器具有不同的硬件。它甚至不能保證在同一個系統上,你將在多次運行中獲得相同的序列。

1

我想她的意思是,很少是在當一個線程將啓動並完成執行,除非你明確地以某種方式同步這些條件保證。如果多個線程同時讀取和寫入相同的數據,您也會失去對數據安全性的保證。

1

我還沒有看過這本書,它取決於更廣泛的背景。但它可能是在討論線程安全性以及如何在多線程環境中採取額外步驟來確保代碼是線程安全的 - 防止諸如死鎖,活鎖和競態危險之類的事情(所有這些都可能表現爲令人討厭的難以跟蹤的事情導致很多時間和頭痛)。所以試圖阻止這些事情發生在第一位比後來處理效果要好得多。

典型的(簡單的)例如可以由包含兩個字段,x和y A類來證明。當下面的方法被稱爲x和y均爲遞增:

public void inc() { 
    x++; 
    y++; 
} 

現在通常你會以爲這是一個原子操作,調用此方法的唯一結果是,X和Y都遞增。但是,在多線程環境中,這不能自動保證。在x遞增之後,有可能會產生當前線程,並且另一個線程可能會進入並以無效狀態使用該對象,這可能會導致問題。

這只是一個例子,還有很多其他不同類型和類別。總之,你沒有獲得任何形式的線程安全免費,所以很少有保證,如果你寫多線程代碼,你需要學習如何應對這些問題。

我建議在實踐書中的Java併發爲進一步讀,那就是解釋了線程問題非常好一個偉大的書。