IllegalMonitorStateException不会抛出它应该的位置

时间:2013-12-13 22:38:31

标签: eclipse multithreading wait

在研究OJP时,我讨论了Thread wait()方法等主题,根据书中的说法,这部分代码应该抛出IllegalMonitorStateException,因为在同步的对象上调用了wait() ,但我不跟我,任何想法?

public class Syncho {

public  void synchoTest(){
    ThreadTest test1 = new ThreadTest();
    ThreadTest test2 = new ThreadTest();
    ThreadTest test3 = new ThreadTest();
    ThreadTest test4 = new ThreadTest();
    ThreadTest test5 = new ThreadTest();

    test1.start();
    test2.start();
    synchronized(test1){
        try{
            System.out.println("gere");
            //test1 = new ThreadTest();
            //test1.start();
            wait();
            System.out.println("tere");
        }catch(Exception x){}
    }
    //notify();
    test3.start();
    test4.start();
    test5.start();



}

}

实际上“gere”只打印而不是“tere”

我在java 7中使用eclipse

1 个答案:

答案 0 :(得分:0)

是的,异常抛出,正是因为你描述的原因 - 你只是抓住它并吞下它:

catch(Exception x){}

不要那样做。 从不那样做。只是这样做:

catch (Exception x) {
    x.printStackTrace();
}

...会告诉你抛出的异常。