你说得就是中断它吧,以前Java有一个stop()方法,但是,现在的Java版本已经不赞成使用这个方法,除了这个方法,Java语言中也就没有其它终止线程的内置方法。所以,这需要一个线程的run()方法应该不时的检测自身,来判断是否应该终止。一个线程不应该连续运行,而应不时睡眠或者等待,给其它线程提供运行的机会,但一个处于睡眠状态的线程,不可能自动检测它是否应该终止。这里就需要调用一个interrupt()方法。当调用interrupt()方法作用于一个处于blocked状态的线程对象时,这个方法会抛出InterruptedException异常。中断一个线程会引起它的注意,被中断线程可以通过catch子句放置合适的事件对中断做出反应,这个时候就可以把它看成线程终止的条件。

解决方案 »

  1.   

    调用线程的stop()或destroy()方法,但这两种方法都不安全,第一种会立即解锁,第二种则不会解锁。最好是在线程内部设定条件退出run()方法
      

  2.   

    public void run() {
      ...
      while (! terminated) {
         ...
         Thread.sleep(...) or Thread.yield() or synchronized {
                ...
                lockObj.wait(...)
         }
      }
    }
      

  3.   

    class ... {
       boolean terminated = false;
       ...
       public void run() {
        ....上面的函数
       }
       public void close() {
         terminated = true;
       }
    }
      

  4.   

    给你搜索了一下!希望对你有帮助:
    线程只有如下四种状态:运行,挂起(睡眠),就绪(等待),结束(死亡)。你说的dead就是最后一种,在java中有两种方式,一种是自然结束,一种强制dead,不过为了安全性和稳定性,最好只用第一种。线程运行完了并不代表线程类被回收了,你依然可以再用,再次运行就是。
    另外,java中没有提供自行回收对象,这个是由它的垃圾回收器自动回收,你并不知道何时何地进行这样的处理。所以线程完毕,并不代表资源回收,当然除了数据库连接,网络连接,流连接可以close外(这个也要自己进行释放)。如果你不想多余太多的废弃的对象,你可以在结束后,将线程类的主要域设置为null,它们因为而成为弱引用对象,是优先被垃圾回收器回收的。http://expert.csdn.net/Expert/topic/1061/1061597.xml?temp=.9133417
    你去看看可能对你有帮助!