在写线程池代码的时候,最初始报 IllegalMonitorStateException异常,检查发现 在没有进行同步的对象上调用notify,wait操作,所以报该异常
api中解释:
public class IllegalMonitorStateExceptionextends RuntimeException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 从以下版本开始: JDK1.0 另请参见: Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(long, int), 序列化表格
也就是当前线程不是该锁定对象的所有者,也就是当线程锁定某个对象,才能在该对象上调用等待,唤醒等方法:
例如 :
exapmle 1,锁定方法所属的实例对象: public synchronized void method(){ //然后就可以调用:this.notify()... //或者直接调用notify()... } exapmle 2,锁定方法所属的实例的Class: public Class Test{ public static synchronized void method(){ //然后调用:Test.class.notify()... } } exapmle 3,锁定其他对象: public Class Test{ public Object lock = new Object(); public static void method(){ synchronized (lock) { //需要调用 lock.notify(); } } }