如何在应用程序退出时结束非守护程序线程?

时间:2014-08-14 12:10:30

标签: java multithreading javafx javafx-2 javafx-8

我的应用程序中有一个主线程,在这个主线程中我创建了另一个线程,让我们说它命名为" WorkerThread"。 WorkerThread具有无限循环,可以进行一些数据库搜索,最终通过串行端口与热敏打印机进行通信。 但是当用户关闭应用程序时,它仍处于活动状态,因为该线程仍在运行。 我知道我可以将我的线程设置为守护进程,这意味着线程将在应用程序关闭时停止,但我也知道这可能会导致IO错误。 那么,在非守护程序线程中实现此行为的最有效方法是什么?

3 个答案:

答案 0 :(得分:2)

添加boolean标志以在应用程序退出时停止线程。

public class WorkerThread extends Thread {

    private boolean running = false;

    @Override
    public void run() {
        while (running) {
            // do smth
        }
    }

    @Override
    public void start() {
        setRunning(true);
        super.start();
    }

    @Override
    public void setRunning(boolean value) {
        this.running = running;
    }
}

要停止该主题,请致电workerThread.setRunning(false)

答案 1 :(得分:0)

使用某种标志(布尔值?)来表示你的工作线程在完成它现在处理的内容后停止。

答案 2 :(得分:0)

您应该使用Thread.interrupt()从主线程中断它。在工作线程中,在每次循环迭代时,它应检查workerThread.interrupted()的返回值,如果为true,则清理并返回。

检查文档,导致诸如wait()之类的阻塞方法将抛出您可能需要评估的InterruptedException。