日期:2014-05-20  浏览次数:20687 次

Java 线程 停止
背景:
  网上搜到的关于Java线程停止的方法:
外部调用线程的interrupt方法,然后在线程的run函数中,

  1. While(isInterrupt());
  2. 在循环的末尾添加Sleep(),然后产生异常
  3.或者2个混合用。
  

问题:
  我的线程中没有While循环,但它是一个耗时操作,当这个操作在完成一半时,如何安全停止线程。

请各位高手帮忙看看有什么好的办法。

------解决方案--------------------
设置一个标志位,时不时检查一下。
------解决方案--------------------
1.如果时间是固定的,比如需要暂停10分钟,那可以直接Thread.sleep(long)。
2.如果时间不固定那比如可能是10秒也可能是5秒。
Java code

while(true){
    // wait...
    if(flag){
        continue;
    ]

    // run...
}

------解决方案--------------------
试试ExecutorService的shutdownNow()看看

------解决方案--------------------
API 中好像没有直接给出接口,Thread.stop() 也不建议使用了,LZ 能否将这个“大任务”分几个阶段来执行,每个阶段之间进行检查线程是否被中断的操作? 
把代码贴一下,看看还有没有更好的解决方案。
------解决方案--------------------
你这个耗时操作可以分解为多个步骤吗?如果可以,在每个步骤之间加上判断语句。如果不可以,只有一个操作,要到这个操作(方法)里面看看情况如何,能分则分,不能分就只能根据操作的内容另外想办法了。例如,如果是执行exe文件,那么就对进程对象操作,强制停掉。总之要具体问题具体分析了。