我有一个使用连接池连接的线程,并在运行大约1分钟的db上执行查询。如果用户退出应用程序,则在1分钟之前,此线程将进入无限循环并且永不释放。 如何确保当用户点击退出按钮时,所有线程都将被杀死?
答案 0 :(得分:0)
当用户注销时,将标记设置为false
。线程应检查此标志以停止提前运行。
显示一些代码会更有帮助。
答案 1 :(得分:0)
您可以向正在创建线程的主类添加一个关闭钩子。
在这里举个例子:
在主要类中添加以下行:
Runtime.getRuntime()。addShutdownHook(new Message());
static class Message extends Thread {
public void run() {
System.out.println("Bye.");
try {
// do your work here
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
首先,您需要跟踪启动的线程以及自己启动线程的组件。
其次,你需要正确关闭它们。对于轮询/循环的线程,您需要退出这些循环(可能通过设置标志)。您还需要中断可能在I / O上等待的线程,并正确处理该中断。有关这个经常被误解的问题的信息,请参阅this article from Java Specialist(基本上,在被中断的线程上重置中断标志......)