标签:
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();
即可。
标签:
原文地址:http://my.oschina.net/u/921876/blog/398300