IllegalMonitorStateException
1。这异常就是因为一个线程压根就没拥有这个对象,却试图去等待他的监控器。
比如你有很多线程都来访问一段代码块,代码块中有个xxx.wait(),一次只可能有一个线程拥有对象的监视器,你如何才能拿到这个监视器呢?
- 通过执行此对象的同步实例方法。
- 通过执行在此对象上进行同步的
synchronized
语句的正文。 - 对于
Class
类型的对象,可以通过执行该类的同步静态方法。
如果你没有用synchronized(xxx)来包含这块代码,那么很多的线程都可以来跑这个xxx.wait(),此时就会出现问题。
解决方法
synchronized(object){ object.wait();} 必须先拿到这个对象
2。或者说在没有拥有这个对象的情况下,去通知其他等待这个对象的线程。
feiyue3008