Java线程正常释放
我有一个线程,它使用连接池连接,并在数据库上执行查询,该数据库运行约1分钟。在1分钟之前,如果用户注销应用程序,该线程将进入无限循环,并且永远不会释放。Java线程正常释放,java,multithreading,Java,Multithreading,我有一个线程,它使用连接池连接,并在数据库上执行查询,该数据库运行约1分钟。在1分钟之前,如果用户注销应用程序,该线程将进入无限循环,并且永远不会释放。 如何确保当用户单击注销按钮时,所有线程都将被终止?当用户注销时,将标志设置为false。线程应检查此标志以停止向前运行 显示一些代码会更有帮助。您可以向正在创建线程的主类添加一个关闭挂钩 这里举个例子: 在主类中添加此行: Runtime.getRuntime().addShutdownHook(新消息()) 静态类消息扩展线程{
如何确保当用户单击注销按钮时,所有线程都将被终止?当用户注销时,将标志设置为
false
。线程应检查此标志以停止向前运行
显示一些代码会更有帮助。您可以向正在创建线程的主类添加一个关闭挂钩 这里举个例子: 在主类中添加此行: Runtime.getRuntime().addShutdownHook(新消息()) 静态类消息扩展线程{
public void run() {
System.out.println("Bye.");
try {
// do your work here
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
首先,您需要跟踪您启动的线程,以及启动线程本身的组件 其次,您需要正确关闭这些线程。对于轮询/循环的线程,您需要退出这些循环(可能通过设置标志)。您还需要中断可能正在等待I/O的线程,并正确处理该中断。有关此经常被误解的问题的信息,请参阅(基本上,重置中断线程上的中断标志…)