public class LifeCycleTest { public static void main(String[] args) throws Exception {
LifeThread thread = new LifeThread(); 
thread.start(); 
Thread.sleep(1000);
thread.wait(10000);

thread.interrupt();

}}class LifeThread extends Thread{
public void run(){
while(!this.isInterrupted())
System.out.println("LifeThread:" + this.getName());
}
}
上诉代码不能成功停止线程,因为加入thread.wait(10000);去掉了就可以了。为什么,求高手帮忙解答wait的影响

解决方案 »

  1.   

    wait()方法是让当前线程等待状态,只有用notify()方法唤醒之后,此线程才能被操作,所以有wait()后面的interrupt()方法是不起作用的,除非在interrupt()前面就唤醒此线程。
      

  2.   

    线程在运行时无法被interrupt 的,只有在wait时才能被interrupt。所以,interrupt只能停止其他线程。interrupt自己会发现自己正在运行,interrupt失败。
      

  3.   

    LZ想达到什么目的?
    如果想让主线程等待,Thread.sleep就可以了
    如果想用wait来让主线程等待,那应该是另一个线程先获取某个对象的锁,然后主线程再请求该对象锁而发生等待。
      

  4.   

    楼主的代码有点问题,在执行 thread.wait(10000);时由于下面的原因抛出了异常
    如果不正确地管理wait/notify调用,应用程序可能会抛出IllegalMonitorStateException,例如,若不拥有对象的锁标记,而试图用wait/notify协调共享对象资源,应用程序将抛出IllegalMonitorStateException实际上thread.interrupt();这行并无调用,偿试修改下代码看效果
    try
    {
             thread.wait(10000);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }