2011-05-02 56 views
0

通常線程安全有可能得到僵局,我們訪問使用synchronized(鎖)的領域。是訪問現場時,直接

如果不使用同步(鎖定)和直接訪問領域,我們會遇到僵局在某些情況下?

回答

4

不同步,不存在僵局,只有數據損壞和未定義的行爲。

+0

我不同意。沒有同步,死鎖仍然是可能的。來源:http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html – 2011-05-02 12:09:13

+0

@Druv看到我的評論給你的答案 - 文章不支持這種說法。 – CPerkins 2011-05-02 12:49:34

+0

@Dhruv Gairola:不,只有(不正確)同步纔會發生死鎖。同步可能在第三方代碼中,但我的答案仍然有效。你提到的文章都是關於同步死鎖。 – 2011-05-02 14:16:26

3

當您使用錯誤的(或沒有)同步您可以得到任何類型的bug。

你不能直接得到死鎖只需通過訪問現場沒有​​塊,但它可以很容易地導致死鎖間接。

這意味着,訪問字段本身不會阻止,但根據你做什麼之後,它可能會導致未預期且隨後導致死鎖狀態。

0

監視器關心互斥。

論deadlocks-問題並不重要,你用什麼方法。更重要的是要滿足某些conditions。無論您使用何種方法,除非滿足這些條件,否則無法避免死鎖。因此,即使使用同步,除非滿足某些條件,否則無法避免死鎖。

+0

我認爲你的意思是你可以在不使用synchronized關鍵字的情況下擁有*(不避免)死鎖。而且你不能保證「在某個地方」你*不會遇到死鎖? – davmac 2011-05-02 11:58:25

+0

對不起,這就是我的意思。我會更新我的答案。 – 2011-05-02 12:00:15

+0

感謝您提供Brian Goetz文章的鏈接。這很好,是的,避免死鎖可能會很棘手。然而,OP的問題是不使用'synchronized'關鍵字是否可能遇到死鎖。 – CPerkins 2011-05-02 12:47:38