繁体   English   中英

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

[英]How to end non-daemon thread when the application exits?

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

添加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)

使用某种标志(布尔值)来指示您的工作线程在完成当前处理后停止。

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

检查文档,因为诸如wait()之类的阻塞方法将引发您可能需要评估的InterruptedException。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM