關于java.lang.IllegalMonitorStateException
Posted on 2011-10-14 18:03 瘋狂 閱讀(27808) 評論(3) 編輯 收藏 所屬分類: java關于IllegalMonitorStateException異常:
api中的解釋
public class IllegalMonitorStateExceptionextends RuntimeException
拋出的異常表明某一線程已經試圖等待對象的監視器,或者試圖通知其他正在等待對象的監視器而本身沒有指定監視器的線程。
從以下版本開始:
JDK1.0
另請參見:
Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(long, int), 序列化表格
- 也就是當前的線程不是此對象監視器的所有者。也就是要在當前線程鎖定對象,才能用鎖定的對象此行這些方法,需要用到synchronized ,鎖定什么對象就用什么對象來執行
notify()
,notifyAll()
,wait()
,wait(long)
,wait(long, int)操作,否則就會報IllegalMonitorStateException異常。
例如 :
exapmle 1,鎖定方法所屬的實例對象:
public synchronized void method(){
//然后就可以調用:this.notify()...
//或者直接調用notify()...
}
exapmle 2,鎖定方法所屬的實例的Class:
public Class Test{
public static synchronized void method(){
//然后調用:Test.class.notify()...
}
}
exapmle 3,鎖定其他對象:
public Class Test{
public Object lock = new Object();
public static void method(){
synchronized (lock) {
//需要調用 lock.notify();
}
}
}