关于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异常的解释的主要内容,如果未能解决你的问题,请参考以下文章

scrapy 关于 rule, 关于多页

JS学习笔记关于选项卡,关于this,关于innerHTML

关于唯典冰淇淋新闻页的布局

关于prototype.js的一些技术说明

主页链接发送到关于/关于页面无法回家

关于写作