class Test {
public static void main(String[] args) {
System.out.println("1.. ");
synchronized (args) {
System.out.println("2..");
try {
Thread.currentThread().wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("3..");
}
}
}
我得到IllegalMonitorStateException
監視器在此代碼中的異常。根據我的理解,由於args
是字符串數組對象的同步塊,當前線程必須已經獲得了鎖並且使用等待方法,我釋放了鎖。IllegalMonitorStateException代碼
有人能解釋一下這個例外背後的原因嗎?
嗯,除了主要的東西之外,沒有線程在這裏創建,除非我失去了一些東西。請發佈您的完整堆棧跟蹤。 – hexafraction
哪一行引發異常? – zch
您正在爲args對象持有監視器,但在當前線程對象上調用wait()。你需要在你正在監視的對象上調用'wait()'。見例如這個問題:http://stackoverflow.com/questions/3773807/threads-synchronizing-in-java-illegalmonitorstateexception?rq=1 – confusopoly