我是線程的新手,特別是關鍵字。同步塊
我知道如果一個線程的狀態改變爲BLOCKED
,如果它試圖訪問另一個線程已經擁有該鎖的同步塊。
參考:
synchronized (objA){
objA.methodA();
}
//some code
objA.methodB();
我的問題是另一個線程是否可以通過獨立的其他方法(在methodB()
本示例)改變對象objA
。或者擁有鎖意味着沒有其他線程可以以任何方式訪問/更改objA
,也就是說,更改代碼是否在同步塊內?
那麼是否有可能一個不同步的方法在'objA'上被調用,而另一個線程擁有該監視器呢? – JonJavaK
是的。任何線程都可以隨時調用非同步方法,因爲它不需要任何鎖來調用它。 –