假設有以下代碼:Java方法同步使用不當?
class MyClass {
synchronized void myMethod1() {
//code
}
synchronized void myMethod2() {
//code
}
}
現在假設myMethod1()
和myMethod2()
訪問不同的數據;現在如果有兩個線程,線程A只調用myMethod1()
而線程B只調用myMethod2()
。
如果線程A正在執行myMethod1()
,線程B將等待myMethod2()
塊,即使它們不訪問相同的數據並且沒有理由這樣做?據我所知,同步方法使用this
對象的監視器作爲實例方法,而MyClass.class
對象的監視器用於靜態函數。
或者一個[鎖定對象(http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html )。 –
@DuncanJones的確如此。 – Mureinik