自己覆盖destroy()方法或stop()方法。但需要自己调用这个方法。方法里面写释放socket或inputStream/outputStream等资源就可以了。最好在后面加上:Thread t = this;
t = null;
仔细看看JDK里面的文档,写得很清楚。

解决方案 »

  1.   

    在run 方法中return 就可以了,还有楼上的方法
    Thread t = this;
    t = null
    不行。
      

  2.   

    怎么不行?我的程序都是这么写的!Thread t = this;
    t = null;这是为了提醒垃圾收集器回收资源!
      

  3.   

    线程结束是可以在run()中控制的,只要一个线程的run()执行了return();就可以了。不赞成使用stop(),它只是把线程给阻塞了。
    我用线程实现过并行算法,很喜欢研究多线程。多交流!!
      

  4.   

    JDK文档上说不赞成使用stop()确实不假。但后面说了,赞成覆盖stop()方法!!!!
      

  5.   

    你可以在里面执行interrupt(),来提醒线程该结束了。但需要自己在run()方法里面检测interrupted()
    线程的软件我也编过很多。
      

  6.   

    呵呵,你们都编过很多,就我没有啊。
    我连stop()都没用过,我干嘛用stop()?
      

  7.   

    上面的人说得很对,你可以退出run()函数,也可以覆盖stop()方法,这两种都可行,我也是在学的!
      

  8.   

    to hccpro(hcc) :
    Thread t = this;
    t = null;
    确实没用也,因为垃圾回收只有当对象没有被引用时才起作用。
    现在我们看看你的过程:
    //执行这段前 THIS 对象有this 1个引用
    Thread t = this;
    //这时,有2个变量引用对象 ,t 和this 
    t = null;
    // 这时还剩有一个变量引用对象,就是this所以这段程序不起任何作用一点拙见
      

  9.   

    java 1.2都抛弃stop()方法了,还讨论什么?
    你重写起什么名字不行,偏要还叫stop()?什么意思嘛。
      

  10.   

    设个标志
    在run()里用while或if判断就行了嘛
    think in java 和 core java 都这样做的
      

  11.   

    楼上几位说的都很有道理,在RUN方法的循环中用一个标记,当退出循环,线程自然就停止了。如:.....
    public void run(){
      while(isstop){
         .....
      }
    }
    ......public void stop(){
      isstop=false;
    }我觉得这样控制一个线程是比较好的,到目前为止我都没有遇见过什么问题。
      

  12.   

    powerball (力量) 
    不太明白你的意思,你的意思好象是说在要将线程直接杀掉吗?
      

  13.   

    这些都不是很好的办法,当你用".stop()"方法时,系统会给出一个警告的。
      其实,线程好多都是用来反复的做某件事的,因此通常在"run()"方法中加入这样的一句:while(true){},你只要将这句改为:while(goOn){}即可,goOn是你自己定义的一个boolean变量。当你想要结束这个线程,只要将goOn赋值为false,循环就会退出,线程自然结束了。试试看,很灵的。
      

  14.   

    我认为,当run()方法结束的时候,线程就结束了,我在学习think in java的时候就是这样认为的,而且我在实际的开发中也是这样使用的,所以可以使用两种方法来结束线程,一个return()返回,以及while(can_do){can_do=false}都可以。
      

  15.   

    hehecafe(呵呵咖啡馆)和wenandwu(动感超人) 的办法是一样,也是这个问题的最终答案!
      

  16.   

    如果你想在再线程外杀死线程可以在线程类里面加入一个方法,如 
    public void kill()
    {
     \\在这可以把线程的判断标志can_do附值为假
      can_do=false;
    }
    但是这就涉及到线程同步的问题,具体的我就不太好说了。
      

  17.   

    线程几种途径中止,比如说异常,强行杀死,或者程序本身已运行完毕;
    因此如没有特别要求,直接退出进程体,线程就自动停止了;然后java的垃圾外理器会在适当的时候清理它;所以你只需要在代码结尾处加一条return;语句就行了!
      

  18.   

    其实core in java2里面讲得很清楚,要安全地终止一个线程,可以用一个变量来便是这个线程是否有终止要求,并让这个线程定期地测试这个变量。
    public class MyThread extends Thread
    {  public void run()
       {  while (!stopRequested && more work to do)
          {  do more work
             ……
          }
       }
       public void requestStop()
       { stopRequested = true;
       }
       private boolean stopRequested;
    }
      

  19.   

    在线程中设置条件变量的方法好,在其它工具中(vc,bcb)我一般都是这么做的。
      

  20.   

    上面各位仁兄已经说得比较清楚了...就是在线程的run()中增加判断条件,不符合条件就退出,我个人认为,这是一种最好最安全的方法..
    不过在涉及多线程同时操作时,有时需要考虑同步问题..
    多个线程同时kill同一个线程时:
    void kill()
    {
        syncronize(this)
        {
            if (bFirstEnter)   //if the method is called first 
            {
               bFirstEnter = false;
               bStop = true;
               notify();      // notify the other thread.wait() return
            }
            else
            {
               wait();       // wait util notified
               bStop = true;
               notify();
             }
         }     
    }
    这是申明一个对象同步方法,也就是说,同时只能有一个线程进入此方法.