2011-09-11 62 views
3

對象的wait()方法只能在同步上下文中調用,即當前線程必須鎖定對象才能調用wait()方法。現在如果一個線程T1鎖定一個對象(obj)並調用其等待方法obj.wait()。其他線程如何鎖定此對象(obj),以便它們也可以調用等待,它已經擁有T1?線程 - wait()

回答

9

wait釋放同步的上下文。從documentation

當前線程必須擁有該對象的監視器。這款顯示器並等待另一個線程的線程釋放 所有權通知 線程在等待這個對象監視器醒來(...)

+0

是的,同步塊進入半鎖,其他線程可以獲得鎖。由於同步塊圍繞兩個語句,喚醒線程'加入'同步的上下文,並且在上下文之外不可能訪問'鎖定'資源。 –

+0

「半鎖」..?! –

0

上你只需要調用等待的時間是同步的()方法,而不是等待時間的持續時間。

相關問題