使用中断方法终止线程

时间:2017-01-27 16:01:38

标签: java multithreading tomcat thread-safety interrupted-exception

我有一个运行文件解析任务的线程。它被设置为一个守护程序线程,它在后台运行,从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();
        }
    }
}

这会在所有情况下干净地退出线程吗?

1 个答案:

答案 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线程没有问题