我只需要確認我已經正確理解了鎖定同步塊的概念。 首先我會告訴我所瞭解的。 獲取對象的鎖定意味着沒有其他線程可以訪問對象類的同步代碼。在同步方法的情況下,線程獲取用於調用該方法的對象的鎖定(即,隱式地引用該引用)。這意味着其他線程無法訪問當前對象的類的同步代碼。但是,在同步塊的情況下,我們可以指定我們希望線程獲取鎖的對象。同步塊鎖定
現在讓我們說我們的方法中的在A類同步塊獲取鎖類B的對象因此,可以說一個線程進入該同步塊,並已獲得B類的特定對象的鎖
如果任何其他線程使用B類的同一對象,它將無法在類A中輸入同步塊,對嗎? 而且其他線程也不能訪問類B中的任何同步代碼?
那麼A類中的其他同步代碼呢?由於線程已獲得對類B的對象的鎖,其他線程可以訪問類A的另一個同步代碼嗎?這意味着A類的對象沒有鎖定,只有B類?
我希望人們瞭解我的問題。
在此先感謝。
就類而言,類是不相關的(不幸的是,靜態方法標記爲'Class'對象上的同步鎖--DH)。把鎖想象成另一個對象,每個對象都帶有一個最終引用(這是一個糟糕的設計!),鎖定一個對象並不意味着不打擾鎖的代碼無法訪問該對象的字段。 – 2009-11-29 07:43:46