2013-12-13 28 views
0

在为OJP学习时,我谈到了Thread wait()方法等主题,根据本书,这部分代码应抛出IllegalMonitorStateException,因为wait()会在对象上调用除了一个同步,但我不与我,任何想法?IllegalMonitorStateException不会抛出它应该在哪里

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(); 



} 

}

实际上是 “基尔” 只印不是 “泰雷”

我使用的Eclipse的Java 7

回答

0

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

catch(Exception x){} 

不要这样做。 从来没有这样做。只是这样做:

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

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

+0

是的,这是正确的......问题是**没有例外抛出** –

+0

@OsamaYaccoub:啊,我明白了。好的,为了重现这一点,你能告诉我们什么'ThreadTest'看起来像?一个简短但完整的例子真的有帮助。 –

+0

@OsamaYaccoub:再看一遍,我敢肯定有一个异常*会被抛出,但是你正在捕获它,并且完全没有做任何事情。 –

相关问题