2013-05-19 32 views
0
public class Check { 

    public boolean toChange = false; 

    public synchronized boolean getChange() { 
     return tochange 
    } 

    public synchronized setChange(boolean change) { 
     this.tochange = change 
    } 
} 

當2個不同的線程試圖訪問獲取並設置simultanoesuly時,它會以同步的方式發生由於鎖定檢查對象?內部鎖的工作

回答

4

由於這兩種方法是非靜態同步,沒有2個線程在任何時刻,可以同時執行這兩種方法,如果它們屬於相同的實例。

所以是的,它會以同步的方式發生在這個類的實例中。

當您創建Check c = new Check();

和2個線程,即t1, t2試圖同時訪問c.getChange()c.setChange(),只有一個線程將被賦予訪問監控(這是實例c),另一個線程必須等待,直到之前的線程完成工作並釋放監視器。

這裏實例c是用於訪問同步

+0

感謝您的回覆,所以它確實取決於獲取對象鎖定,在任何給定時間只能通過一個線程獲取對象鎖定。 – Ullas

0

只有一個線程可持有對象的鎖默認顯示器。然後,只有那個線程可以在該對象上輸入同步方法。其他線程無法訪問該對象的任何同步方法。

線程但可以釋放鎖,而不從方法返回,通過調用

Object.wait() 

其他線程將在阻塞狀態,直到第一個線程釋放了檢查的情況下鎖定object.Also請注意,任何線程都可以輸入不在該對象上同步的類的方法。

所以答案是是的兩個不同的線程不能同時訪問get和set方法。