背景:
  网上搜到的关于Java线程停止的方法:
外部调用线程的interrupt方法,然后在线程的run函数中,  1. While(isInterrupt());
  2. 在循环的末尾添加Sleep(),然后产生异常
  3.或者2个混合用。
  问题:
  我的线程中没有While循环,但它是一个耗时操作,当这个操作在完成一半时,如何安全停止线程。请各位高手帮忙看看有什么好的办法。

解决方案 »

  1.   

    1.如果时间是固定的,比如需要暂停10分钟,那可以直接Thread.sleep(long)。
    2.如果时间不固定那比如可能是10秒也可能是5秒。while(true){
    // wait...
    if(flag){
    continue;
    ] // run...
    }
      

  2.   

    试试ExecutorService的shutdownNow()看看
      

  3.   

    interrupt() 
              中断线程。Java帮助文档中有这个方法 其他的方法都过时了
      

  4.   

    API 中好像没有直接给出接口,Thread.stop() 也不建议使用了,LZ 能否将这个“大任务”分几个阶段来执行,每个阶段之间进行检查线程是否被中断的操作? 
    把代码贴一下,看看还有没有更好的解决方案。
      

  5.   

    你这个耗时操作可以分解为多个步骤吗?如果可以,在每个步骤之间加上判断语句。如果不可以,只有一个操作,要到这个操作(方法)里面看看情况如何,能分则分,不能分就只能根据操作的内容另外想办法了。例如,如果是执行exe文件,那么就对进程对象操作,强制停掉。总之要具体问题具体分析了。
      

  6.   

    感谢 
    wakeUpDoNottLazy, 
    stonefeng的回答,由于总分有限。
    luochengor的方法没听过,我再看看如何实现。不过还是要感谢你。
      

  7.   


    我想询问一件事情 首先为什么会发生完成一半的时候停止线程的事情 如果是因为主线程执行结束之后想结束所有的线程我个人建议你用后台线程(setDeamon设置为true) 另外 强制中断线程的后果你最好弄清楚