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