FindBugs 에서 자바 [2]

1598 단어
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 () 등 방법 을 사 용 했 기 때문에 자바. lang. IllegalMonitor State Exception 을 던 졌 다.
실제로 자 물 쇠 를 채 우 는 대상 에 게 조작 하면 된다.
예 를 들 면:
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
 
 
 

좋은 웹페이지 즐겨찾기