50,526
社区成员
发帖
与我相关
我的任务
分享
synchronized(obj){
这句代码已经指明了你是在obj对象上做同步.那么调用obj.wait()方法肯定不会有IllegalMonitorStateException异常啦.
public class Test{
public static void main(String[] args)throws Exception{
Object obj = new Object();
obj.wait();
}
}
类似这样的情况才会抛出IllegalMonitorStateException异常.当你执行同步代码块的对应的对象并和调用wait方法同一个对象时候会抛出.你代码上的两个线程都是基于obj对象同步的.所以在同步代码块中可以调用obj.wait().一进入同步代码块就相当于加对应同步对象的锁.遇到wait时候跳出交给其他对应该对象同步的其他线程.所以两个线程都一直等待.并不会抛出你说的那个异常.