運行同步方法會將其對象的鎖定給調用該方法的對象。通過運行其同步方法獲取對象的鎖
在代碼this Q, 我是否需要同步塊上 - 對象c
本身或其他任何東西?
setInt()
是一種同步方法。
在
c.setInt(c.getInt()+k);
當調用setInt()
,是因爲setInt()
獲得的c
鎖的線synch'd和 鎖沒有之前setInt()
返回釋放。這是整個塊,無需牛逼同步它(?)
所以,
c.setInt(c.getInt()+k);
,如果我在下面的代碼中註釋掉「行-A」 &「線路B」仍然會被同步。 setInt()在這裏同步,getInt()不是:
public void update(SomeClass c) {
while (<condition-1>) // the conditions here and the calculation of
// k below dont have anything to do
// with the members of c
if (<condition-2>) {
// calculate k here
synchronized (c) { // Line-A
c.setInt(c.getInt()+k);
// System.out.println("in "+this.toString());
} // Line-B
}
}
這讓我一直很好奇。
TIA
不這麼用噸同一個問題的問題淹沒。順便說一下,我給了你[回答你的第一個問題](http://stackoverflow.com/a/24281311/2711488),這使得所有其他的kludges不必要的。 – Holger