java多线程如何停止一个线程?如果一个线程被创建后,后天运行着很复杂的运算,很耗时间,但是,中途想把它停掉,请问有何方法????

解决方案 »

  1.   

    中断线程的方法有很多,最简单的是直接调用stop()和subspend()方法,但是这两种方法并不推荐使用,因为它们有可能导致数据的不同步而发生死锁现象。如果真的需要终止一个线程,可以使用以下几种方法:
    1、让线程的run()方法执行完,线程自然结束。(这种方法最好)
    2、通过轮询和共享标志位的方法来结束线程,例如while(flag){},flag的初始值设为真,当需要结束时,将flag的值设为false。(这种方法也不很好,因为如果while(flag){}方法阻塞了,则flag会失效)
    3、通过调用interrupt方法和捕获InterruptedException异常来终止线程。实际上最好的方法是使用线程池,当线程不用了,就让它sleep并放进队列中,这样可以最大限度地利用资源。
      

  2.   

    线程很难控制。1楼解释得很详细了。其实最安全的结束线程方法是
    thread = null;
    不过这也需要等线程运行结束才起作用。在运行中似乎不能停止线程。
      

  3.   

    如果线程没有在执行会阻塞的方法时,一般可以不记他的运行时间。在这种情况下,线程如果循环运行,务必在循环条件加上Thread.currentThread().isInterrupted(),这样可以在每次循环开始时响应其它线程对它的interrupt操作。
    如果线程里在执行会阻塞的方法时,这些方法基本都可以自己以抛出异常的方式响应interrupt,你处理异常就可以了。
      

  4.   

    stop()已经过时了,好想只有阻塞,和 等待两种
      

  5.   

    如果是进行很复杂的计算的界面,比如用户在下载或者其他耗时间的动作,可以从新开个线程,让其在后台运行,而不是让当前线程运行,发现太耗时了,然后停止。如何停止线程,上面说的很清楚了,具体做法可以随便找本java基础教程的线程那章。