举例如下
如果在线程A里面调用线程B的wait()方法
那么线程A会等待线程B执行玩以后才会执行,请问时什么原因。
这就相等于调用了线程B的join()方法.
jion()方法的实现也是调用wait().
这时什么原理。

解决方案 »

  1.   

    wait()方法是final方法。
    所以无论是什么对象调用,都一样啦。
    jion()也是final方法,让所以调用jion()的方法都放在同一个等待队列里面。
      

  2.   

    楼上的final 方法只是说明该方法不能被覆盖。
    它又不是static 怎么能谁调用都一样呢?

    请看下面的代码
    class A extends Thread{ 
      B b ;
      A(B b){
       this. b =b;
      }
      public void run(){
        b.wait();
        跟
        synchronized(this){
         wait();怎么能一样?????
        }
      }
    }
      

  3.   

    补充
    class A extends Thread{ 
      B b ;
      A(B b){
       this. b =b;
      }
      public void run(){
        synchronized(b){
        b.wait();
        }
        跟
        synchronized(this){
         wait();怎么能一样?????
        }
      }
    }
    B 是另外一个线程
      

  4.   

    1. 线程A是会等待B.notify方法的调用!而不是等待执行完成,和join不一样的
    2. join也不和wait一样,它不会在调用notify的时候唤醒
    所以你的理解是错误的
      

  5.   

    露上的你执行试一试就知道了
    再说了你可以看一下join()方法的实现它其实调用的就是wait()方法
    我不知道这是什么原因。
    照里说wait()要么时间到了,要么被notify()
      

  6.   

    嗯,这个是我的错。我还以为两者不一样呢
    不过这个也很好解释啊,在线程退出的时候在内部自动会调用notifyAll方法,所以你的程序无论是调用了wait还是join都会被唤醒,所以收到通知