黑马程序员技术交流社区

标题: 报异常应该怎么着手? [打印本页]

作者: zhohao    时间: 2014-6-20 19:41
标题: 报异常应该怎么着手?
本帖最后由 zhohao 于 2014-6-30 08:23 编辑

java.lang.IllegalMonitorStateException出现这个异常显示该怎么办?从了哪里入手?
作者: youngkay    时间: 2014-6-20 20:28
在代码里下断点,调试
作者: zhohao    时间: 2014-6-30 08:24
youngkay 发表于 2014-6-20 20:28
在代码里下断点,调试

非常感谢,继续学习中。
作者: 张益达    时间: 2014-6-30 12:51
本帖最后由 张益达 于 2014-6-30 12:57 编辑

你敢不敢先看看这个异常是什么异常  亲
作者: 张益达    时间: 2014-6-30 12:52
抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
关于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();
    }
}
}
作者: 张益达    时间: 2014-6-30 12:54
就是说   你非要在线程A里面 操作线程B的锁  报这这错  明白了没  
作者: youngkay    时间: 2014-6-30 13:33
zhohao 发表于 2014-6-30 08:24
非常感谢,继续学习中。

嗯,加油小伙伴
作者: zhohao    时间: 2014-7-3 17:38
张益达 发表于 2014-6-30 12:52
抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监 ...

谢谢,十分详尽的答案。努力学习中




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2