- 该方法会立刻停止线程运行,放弃所有未执行的代码,包括在 catch 或 finally 语句中的,因此可能会导致任务清理工作无法完成,如文件流,数据库指针等的关闭。
- 该方法会释放该线程所有的资源监视器,由于任务执行成都不可知,导致该线程所持有的资源状态不确定,可能出现数据不一致的问题。
如何正确停止线程:
- 任务执行前或指定执行节点检查可执行状态;
@Override
public void run() {
while(!exit){
working...
}
}
- 使用 interrupt() 中断线程;
@Override
public void run() {
while(!Thread.currentThread().isInterrupted()){
working...
}
}
2020-07-14
网友评论