我有一个运行文件解析任务的线程。它被设置为一个守护程序线程,它在后台运行,从tomcat启动到关闭执行任务。
我希望在中断和服务器关闭时处理线程终止。我想知道我是否正确。
class LoadingModule{ // Thread is started from here
threadsStartMethod() {
Thread t = new Thread(FileParseTask);
t.setDaemon(true);
t.start();
}
}
Class FileParseTask implements Runnable {
@Override
public void run() {
try {
while(!Thread.currentThread.isInterrupted) {
// poll for file creation
// parse and store
}
} catch(Exception exit) {
log.error(message);
Thread.currentThread.interrupt();
}
}
}
这会在所有情况下干净地退出线程吗?
答案 0 :(得分:1)
它取决于循环内的代码。如果循环内的代码捕获中断的异常并恢复,您将永远不会看到它。也是一般例外"退出"隐藏其他例外情况。更改代码,以便知道是什么打击了你。
我会做以下
Class FileParseTask implements Runnable {
@Override
public void run() {
while(!Thread.currentThread.isInterrupted) {
try {
// poll for file creation
// parse and store
} catch(Exception exit) {
if (InterruptedException)
break;
else{
//
}
log.error(message);
}
}
}
}
这对我来说最有2K线程没有问题