public class Test
{
public static void main(String[] args){
new Test();
} Test(){
Test alias1=this;
Test alias2=this;
synchronized(alias1){
try{
alias2.wait();
System.out.println("Done waiting");
}
catch(Exception e)
{
System.out.println("asdfds");
} finally{
System.out.println("finally");
}
} System.out.println("all done");
}
}请问,这个程序有几个线程,有几个对象,监视器,并请解释一下结果
(运行结果是什么也没有)
假如是2个线程的话,那么当alias2在wait的时候,alias1应该可以打印啊

解决方案 »

  1.   

    这里的wait之后又没有被唤醒,肯定是没输出结果的
      

  2.   

    请楼上的看清楚
    的确alias2没有被唤醒,但是这个影响alias1的运行吗?
      

  3.   

    关键是alias1和alias2是2个线程吗?
      

  4.   

    alias2被wait以后又没有被notify,肯定没有输出结果的,程序会一直等待下去的!
      

  5.   

    I think there is only one object. alias1& alias2 point to the same object.So when the alias1 is waiting the alias2 is also waiting.Right?
      

  6.   

    楼主多次问到一个线程还是两个线程,不知道这个程序在什么地方产生线程了,我怎么看也只有一个主线程啊,没有产生子线程啊。alias2.wait();把整个主线程都阻塞了,程序还怎么运行啊。你的alias1和alias2都不是线程,只是一个很普通的对象而已啊。
      

  7.   

    我觉得吧,一个线程:main  一个对象 Test (alias1,alias2都是指向通过一对象),因为把这个对象等待了,并没有唤醒,所以没有输出结果