首页 > 数据库技术 > 详细

从FindBugs中学Java【二】

时间:2015-04-09 23:54:19      阅读:471      评论:0      收藏:0      [点我收藏+]

    IMSE_DONT_CATCH_IMSE

java.lang 

Class IllegalMonitorStateException

java.lang.Object

  java.lang.Throwable

      java.lang.Exception

          java.lang.RuntimeException

              java.lang.IllegalMonitorStateException

All Implemented Interfaces:

Serializable

public class IllegalMonitorStateException

extends RuntimeException

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.

 

这个问题大抵是因为给没有锁的对象使用了诸如notify(),wait()等方法,所以抛出java.lang.IllegalMonitorStateException

给实际上加锁的对象进行操作就可以了。

例如:

public class ThreadTest {
 public static void main(String[] args) {
  new Thread(new ThreadDemo()).start();
 }
}
class ThreadDemo implements Runnable {
 private int i = 0;
 public synchronized void run() {
  try {
   ThreadTest.class.wait();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println(Thread.currentThread().getName() + ":" + i);
 }
}

 妥妥地

Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
 at java.lang.Object.wait(Native Method)
 at java.lang.Object.wait(Object.java:503)
 at com.github.alaahong.ThreadDemo.run(ThreadTest.java:14)
 at java.lang.Thread.run(Unknown Source)

 只需将其中的

ThreadTest.class.wait();

 改成

this.wait();

 即可。

Ref:1  2  3  4

 

 

 

 

从FindBugs中学Java【二】

原文:http://my.oschina.net/u/921876/blog/398300

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!