void waitForSignal(){
Object obj=new Object();
synchronized(Thread.currentThread()){
obj.wait();
obj.notify();
}
}
请问选什么,求解答。

解决方案 »

  1.   

    显然是A。。  
    你把它复制在ECLIPSE里看下不就好了。。
      

  2.   

    A.wait方法可能会抛出InterruptedException异常,所以需要捕获,B编译按照A改可以通过,但是运行时肯定会报IllegalMonitorStateException,因为同步里的对象,才能使用.wait,所以想用obj当锁,应该改为synchronized(obj),两者需要一致。C.wait()没有参数会一直等待下去。D.先改A然后运行会报ClassCastException
    E.线程还会等待,wait没有别的线程给它唤醒notify。
      

  3.   

    这段代码有问题,编译会通过,但运行会报出 IllegalMonitorStateException 。
    因为 synchronized(Thread.currentThread()) 这里同步的是当前线程,
    但在同步块中却用了obj变量的wait()方法。
    由于同步的是当前线程,所以当前线程得到了线程监视器,但同步块中却让一个未指定监视器的对象进行等待。
    将synchronized(Thread.currentThread()) 改为 synchronized(obj) 就能正常运行,但线程会一直等待。
    可以查看一下帮助