关于IllegalMonitorStateException异常的解释
Posted wangshuang1631
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于IllegalMonitorStateException异常的解释相关的知识,希望对你有一定的参考价值。
首先看一下官方文档的解释:
/**
* Thrown to indicate that a thread has attempted to wait on an
* object's monitor or to notify other threads waiting on an object's
* monitor without owning the specified monitor.
* @author unascribed
* @see java.lang.Object#notify()
* @see java.lang.Object#notifyAll()
* @see java.lang.Object#wait()
* @see java.lang.Object#wait(long)
* @see java.lang.Object#wait(long, int)
* @since JDK1.0
*/
意思就是说:
抛出该异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器,然而本身没有指定的监视器的线程。
也就是当前的线程不是此对象监视器的所有者。当前线程要锁定该对象之后,才能用锁定的对象执行这些方法,这里需要用到synchronized关键字,锁定哪个对象就用哪个对象来执行notify(), notifyAll(),wait(), wait(long), wait(long, int)操作,否则就会报IllegalMonitorStateException异常。
几个小例子 :
1、锁定方法所属的实例对象:
public synchronized void method()
//然后就可以调用:this.notify()...
//或者直接调用notify()...
2、锁定方法所属的实例的Class:
public Class Test
public static synchronized void method()
//然后调用:Test.class.notify()...
3、锁定其他对象:
public Class Test
public Object lock = new Object();
public static void method()
synchronized (lock)
//需要调用 lock.notify();
以上是关于关于IllegalMonitorStateException异常的解释的主要内容,如果未能解决你的问题,请参考以下文章