码迷,mamicode.com
首页 > 数据库 > 详细

从FindBugs中学Java【二】

时间:2015-04-09 23:55:06      阅读:328      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!