本帖最后由 c0010012255 于 2011-05-01 15:21:57 编辑

解决方案 »

  1.   

     你自己都wait了怎么调用notify呢?
      

  2.   

    此言差矣 wait是写在run方法里面的 并不影响主线程继续向下执行
      

  3.   

    线程在run方法里获得了锁,此时调用wait方法,但锁仍然被持有;如果调用notifyself() 方法需要获得锁,但此时锁没有被释放,所以无法执行到notify方法.
      

  4.   

    第一种是行的,wt启动线程后释放锁,进入lock的wait set,等待其他获得lock的锁的线程来唤醒它。
    之所以看不到wt启动的线程被main线程唤醒是因为基本上每次都是wt.notifyself()被执行后wt启动的线程才得到执行,此时已经没有线程去唤醒它了,所以办法就是让wt启动的线程跑起来了,然后main线程又还有机会执行wt.notifyself(),所以可以在wt.start()后面加上一个Thread.sleep(100);如果当前正在执行的线程是main,让他先睡会,让wt启动的线程先执行,进入wait set,然后大概100ms过后main唤醒它;还有一种也可以这样了:
    while(true){
    wt.notifyself();
          if(wt.isAlive() == false)
    break;
    }
      

  5.   

    调用wait方法会释放锁,进入wait set。
      

  6.   

    的确 wt.start()线程不一定会被执行 很可能先执行了后面的语句 我就说怎么测试时候会出现小概率被唤醒的情况 原来是这样 非常感谢