当前位置: 代码迷 >> J2SE >> 请问,怎么终止一个java的线程
  详细解决方案

请问,怎么终止一个java的线程

热度:65   发布时间:2016-04-23 20:32:19.0
请教,如何终止一个java的线程
RT,需要在程序中终止一个线程的运行。
从网上搜索的答案来看,stop()方法已经不推荐了,现在推荐的时使用interrupt方法。

不过这里有一个问题,interrupt方法要求该线程处于中断状态,通常是在一个死循环中调用sleep,并监控exception,才能够生效。

而我的需求是,我的线程是线性执行的,没有中断的状态,正常情况下肯定是可以执行结束的。不过由于线程的功能比较复杂,运行一次通常需要2-3分钟的时间,这时就希望有一种方法能终止这个线程的执行,不知道这种情况下如何达到这个目的。
------解决方案--------------------
1.可以自己设置一个标志位flag,加一个while循环,当让它运行时设置为true,不想让它运行时设置flase;
2. 用interrupt 当出现sleep时会出现异常,进不去停止;
------解决方案--------------------
用标志位,根据标志位去break。
------解决方案--------------------
参考文章。
------解决方案--------------------
private boolean closed=true;

public void setClosed(boolean closed){
  this.closed =closed;
}

public void run(){

while(close){

  .............
}


}
------解决方案--------------------
你可以自己关联标位,让它自己去中断
------解决方案--------------------
引用:
Quote: 引用:

线程推出,执行完了就会推出

interrupt终止线程主要是终止那种因为阻塞而迟迟无法执行完的那种线程,当然也包括复杂计算导致执行时间很长的线程。

对于阻塞的线程,interrupt的响应是自动的,某些无法被interrupt拿它是没办法的。某些会响应interrupt的阻塞会自动抛出异常,例如sleep。

对于长时间计算的线程,需要你自己去检查Thread的interrupt标志,如果interrupt已经被设置,就应该响应,可以抛出interrupt异常也可以自己设计出口直接将线程结束掉。


检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。


你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。

如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态