2
如果我有這些功能等待的線程
public void methodA(){
synchronized (ObjectAlwaysDifferent) {
....
}
}
public void methodB(){
}
而且可以在塊,進入裏面的線程,
Thread1 enter with Object1
Thread2 enter with Object2
而另一個線程
Thread3 want to enter with Object1
如果線程循環爲:
public void run(){
while(true){
methodA();
methodB();
}
}
thread3
會在methodA
之內等待,直到object1的lock
會被釋放? 或者如果監視器對象被另一個thread
鎖定,它能夠執行methoB
?
有可能使用Lock和condition(併發API)重寫methodA()方法嗎?
感謝您的回答,所以它仍然是了methodA(內),它會不會執行methoB ()如果它不消耗methodA。 – 2014-10-22 10:41:35
它會等到鎖定被釋放,是的。另外請記住,如果有很多線程,釋放鎖定時不保證順序(隨機線程將擁有鎖定,而不是通過鎖定請求的順序)。如果這對你很重要,請考慮使用ReentrantLock。 – bmartins 2014-10-22 10:44:25