關於IllegalMonitorStateException異常:

api中的解釋
public class IllegalMonitorStateExceptionextends RuntimeException 拋出的異常表明某一線程已經試圖等待對象的監視器,或者試圖通知其他正在等待對象的監視器而本身沒有指定監視器的線程。  從以下版本開始:  JDK1.0  另請參見:  Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(longint), 序列化表格
 也就是當前的線程不是此對象監視器的所有者。也就是要在當前線程鎖定對象,才能用鎖定的對象此行這些方法,需要用到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();
    } 
 }
}
原文地址:http://www.blogjava.net/freeman1984/archive/2011/10/14/361306.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章