IllegalMonitorStateException

1。这异常就是因为一个线程压根就没拥有这个对象,却试图去等待他的监控器。

 

比如你有很多线程都来访问一段代码块,代码块中有个xxx.wait(),一次只可能有一个线程拥有对象的监视器,你如何才能拿到这个监视器呢?

  • 通过执行此对象的同步实例方法。
  • 通过执行在此对象上进行同步的 synchronized语句的正文。
  • 对于 Class 类型的对象,可以通过执行该类的同步静态方法。

如果你没有用synchronized(xxx)来包含这块代码,那么很多的线程都可以来跑这个xxx.wait(),此时就会出现问题。

解决方法

synchronized(object){ object.wait();} 必须先拿到这个对象

 

2。或者说在没有拥有这个对象的情况下,去通知其他等待这个对象的线程。

posted @ 2012-03-21 17:12  lostyue  阅读(548)  评论(0编辑  收藏  举报