疯狂

STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于java.lang.IllegalMonitorStateException

Posted on 2011-10-14 18:03 疯狂 阅读(27769) 评论(3)  编辑  收藏 所属分类: java
关于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();
    } 
 }
}

评论

# re: 关于java.lang.IllegalMonitorStateException   回复  更多评论   

2014-09-23 17:13 by hibernate
经典!一直没弄明白的一个问题,被你一点即破,感谢!

# re: 关于java.lang.IllegalMonitorStateException   回复  更多评论   

2014-12-23 17:01 by 经典
真是一语道破啊!这才是经典。

# re: 关于java.lang.IllegalMonitorStateException   回复  更多评论   

2016-02-12 00:04 by 浪得虚名
找了好多资料没解决的问题,到这里终于明白了,就没看破this.notify()要换成lock.notify()

只有注册用户登录后才能发表评论。


网站导航: