你可能需要在你的线程中加入interrupted()的判断,就是
while(!this.interrupted()) {
...
}

解决方案 »

  1.   

    就是需要楼上的....这里啊我怎么杀啊? 用destroy函数?总是抛出异常啊
      

  2.   

    基本同意楼上的,线程是没办法杀的,只能在run方法中设定退出条件,让他自己运行完退出
    比如你新建一个线程时就创建一个boolean全局变量bStopi
    public run()
      while(bStopi) {
        ...
      }
    }
    然后在想让某个线程停止时,就让bStopi=false;就可以了.
      

  3.   

    大家误会了,我的主程序是个死循环,而线程不是死循环,所以线程里不能用while()
      

  4.   

    如果你强制需要从外部关闭线程,只好调用Thread的Deprecated方法stop()了.主进程维护所有子线程的线程池对象,并且进行线程运行时间的维护,到了规定的超时,从外部stop线程(哪怕线程现在还在运行).
    这倒是一种可以做到的做法.至于还有没有更好的做法,思考中...
      

  5.   

    线程的中止就是应该用interrupt,stop早就不推荐使用了。至于你说的现成数目不断增加,可能是你的那个线程实例还有别的引用指向它,导致JVM不能回收它造成的。我国我觉得xiaohaiz说的方法也有道理,你可以在线程生成的时候,在线程中加一个定时器,定时器时间到了的时候就中止自己。另外你说的加一个标志位的方法我觉得不可取,这样又要自己加一个轮询任务不断的监控这个标志位。比较好的方法应该是用Thread的wait和notify方法来处理。
      

  6.   

    stop确实是不再推荐了.问题在于他的线程定时器很可能很难起到作用.如果他的线程正在阻塞在某个方法,定时器可能起不到相应的作用.或者谁有更好的做法一起探讨一下.或者看看是否能做一个定时器.
    线程的wait和notify方法 优先 考虑于线程轮询标志位.
      

  7.   

    定时器怎么加?我现在用stop已经把线程的数量控制住了,但是不是说不推荐嘛,还有好方法?
      

  8.   

    你可以查一查java.util.Timer的相关资料.Timer是jdk1.3之后引入的定时器类.不知道能不能解决你的问题.具体定时器怎么做我还没有尝试过.
    java.util.Timer extends java.util.TimerThread
    java.util.TimerTask implements java.lang.Runnable在Timer中给出了一系列的scheduler方法用于执行TimerTask.
    不敢确定这个定时器能否解决你的问题,纯当抛砖引玉了.