从FindBugs中学Java【二】

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

时间: 2024-08-08 16:03:05

从FindBugs中学Java【二】的相关文章

从FindBugs中学Java【四】

5.TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED 6.TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS 7.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK 8.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK 9.TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SI

从FindBugs中学Java【一】

findbug 这里[中文列表]: http://svn.codehaus.org/sonar-plugins/tags/sonar-l10n-zh-plugin-1.1/src/main/resources/org/sonar/l10n/findbugs_zh.properties rule.findbugs.IMSE_DONT_CATCH_IMSE.name=不良实践 - 捕获可疑IllegalMonitorStateException rule.findbugs.BX_BOXING_IMM

从FindBugs中学Java【五】

13. TLW_TWO_LOCK_WAIT TLW: Wait with two locks held (TLW_TWO_LOCK_WAIT) Waiting on a monitor while two locks are held may cause deadlock.   Performing a wait only releases the lock on the object being waited on, not any other locks.   This not necess

从FindBugs中学Java【三】

2. BX_BOXING_IMMEDIATELY_UNBOXED double a = 100d; double d = Double.valueOf(a); Primitive value is boxed and then immediately unboxed. 非必要的装箱并立即拆箱操作. Intellij 也会给这样的提示: 没什么好说的 3. IJU_SETUP_NO_SUPER 好像是个遗留问题,出现在JUnit3的时代,e.g. JUnit3里会这么做 public class 

java二维码生成

二维码,是一种采用黑白相间的平面几何图形经过相应的编码算法来记载文字.图画.网址等信息的条码图画.如下图 二维码的特色: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比一般条码信息容量约高几十倍. 2.  编码规模广 该条码能够把图画.声响.文字.签字.指纹等能够数字化的信息进行编码,用条码表明出来:能够表明多种语言文字:可表明图画数据. 3.  容错能力强,具有纠错功用 这使得二维条码因穿孔.污损等导致部分损坏时,照样能够正确

java二维数组的常见初始化

public class Test{ public static void main(String[] args){ //第一种: //int[][] arr1 = new int[][]{{1,2}, {2, 3}, {4, 5}}; int[][] arr1 = {{1,2}, {2, 3}, {4, 5}}; System.out.println("arr1的数值:"); for(int i=0; i<3; ++i) for(int j=0; j<2; ++j) Sy

Java二维码生成与解码

基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> </dependen

Java二十周年之我和java的七年之痒

我和java的七年之痒                              ----java二十周年征文 粉淡香清自一家,未容桃李占年华. java,今已二十桃李年华之年.我七年前与她结缘,那年她年华豆蔻,我弱冠有六.我们从相识到相守走过了七个冬夏,都说七年有痒,值CSDN java二十年征稿之际,我也想说说我们的七年,痒从何来: 七年前,我和java她还未曾谋面,草率的以为她是it的一部分,那时对我来讲it和娱乐圈是一样一样的,神秘而遥远.当时我在做销售工作,每周都有到外地出差,经常买些

Think in Java(二):一切都是对象

1. 数据存储  (1) 寄存器: 速度最快, 数量有限, 它位于CPU内部, 但我们不能直接控制它.在C,C++中允许你向编译器建议寄存器的分配方式. (2) 堆栈: 存放基本类型的数据和对象的引用, 但对象本身不存放在栈中,而是存放在堆中. (3) 堆: 存放用new产生的对象, 速度比分配栈要慢一些. (4) 静态存储: 固定的一块存储区域, 静态存储里面的数据在整个程序运行期间都能访问到. (5) 非RAM: 对象被转化成某种能保存在其他介质上的东西, 要用的时候又能在内存里重建. Th