java.lang.IllegalMonitorStateException Bertha 。 2023-06-19 12:29 5阅读 0赞 #### 异常分析: #### java.lang.IllegalMonitorStateException是在调用object的wait()、notify()、notifyAll()方法的时候可能会出现的异常。 #### 解决方案: #### 在调用上述三个方法的时候,线程必须获得该对象的对象级别锁,换句话说,出现这个异常的原因是,调用wait()、notify()、notifyAll()的对象没有在同步方法(synchronized修饰的方法)或者同步代码块(synchronized(x)\{\})中。想要获取该对象的对象级别锁,也就只有在同步方法或同步代码块中,这两个也是有区别的。 #### 举例说明: #### package com.example.demo.test; public class Demo { public static void main(String[] args) { Object lock = new Object(); Object lock2 = new Object(); // 正确写法 try { synchronized (lock) { lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { synchronized (lock) { lock.notifyAll(); } } // 错误写法示范1,原因:在调用notifyAll()方法的时候,锁对象没有在同步方法(synchronized修饰的方法)或者同步代码块(synchronized(x){})中 try { synchronized (lock) { lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.notifyAll(); } // 错误写法示范2,原因:锁对象是new Object(),不是lock,而且锁对象new Object()还是new的 try { synchronized (new Object()) { lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { synchronized (new Object()) { lock.notifyAll(); } } // 错误写法示范3,原因:调用wait()方法的是new Object(),而不是锁对象lock try { synchronized (lock) { new Object().wait(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { synchronized (lock) { lock.notifyAll(); } } // 错误写法示范4,原因:调用wait()方法的是lock2,而不是锁对象lock try { synchronized (lock) { lock2.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { synchronized (lock) { lock.notifyAll(); } } } } 原来微信打赏还可以备注哦 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5fMjg5MA_size_16_color_FFFFFF_t_70_pic_center] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5fMjg5MA_size_16_color_FFFFFF_t_70_pic_center]: https://img-blog.csdnimg.cn/20200325152812680.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5fMjg5MA==,size_16,color_FFFFFF,t_70#pic_center
还没有评论,来说两句吧...