使用中断方法终止线程

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 个线程,没有任何问题