如果我有以下代碼同步方法VS同步塊
class SomeClass {
...
public synchronized methodA() {
....
}
public synchronized methodB(){
....
}
}
這將同步的「這個」物體上。但是,如果我的主要目的是確保多個線程同時不使用methodA(或methodB),但它們可以同時使用methodA和methodB,那麼這種設計是否會受到限制?因爲此處thread1鎖定運行methodA的對象(與對象關聯的監視對象),但同時thread2也等待對象鎖定,即使methodA和methodB可同時運行。
這種理解是否正確?
如果是,是這種情況下,我們在一個私人虛擬對象上使用同步塊,以便methodA和methodB可以與不同線程並行運行,但不能與不同線程的methodA(或methodB)運行。
謝謝。
在這裏找到答案:http://stackoverflow.com/questions/574240/synchronized-block-vs-synchronized-method - 請使用搜索功能,其他的問題,甚至有完全相同的名稱,涵蓋了同樣的問題。 – 2011-05-27 09:59:45
我認爲你是對的,但一個問題是,對於靜態方法的鎖定與普通對象方法的鎖定不同。該文檔是相當不錯的這個東西:http://download.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html – 2011-05-27 10:01:23