使用中断方法终止线程
Thread termination using interrupt method
我有一个运行文件解析任务的线程。它设置为守护线程,从 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();
}
}
}
这会在所有情况下干净地退出线程吗?
这取决于循环内的代码。如果循环内的代码捕获中断的异常并恢复,您将永远看不到它。通用异常 "exit" 也隐藏了其他异常。更改代码,以便您知道是什么击中了您。
我会做以下事情
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 个线程,没有任何问题
我有一个运行文件解析任务的线程。它设置为守护线程,从 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();
}
}
}
这会在所有情况下干净地退出线程吗?
这取决于循环内的代码。如果循环内的代码捕获中断的异常并恢复,您将永远看不到它。通用异常 "exit" 也隐藏了其他异常。更改代码,以便您知道是什么击中了您。
我会做以下事情
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 个线程,没有任何问题