Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程正常释放_Java_Multithreading - Fatal编程技术网

Java线程正常释放

Java线程正常释放,java,multithreading,Java,Multithreading,我有一个线程,它使用连接池连接,并在数据库上执行查询,该数据库运行约1分钟。在1分钟之前,如果用户注销应用程序,该线程将进入无限循环,并且永远不会释放。 如何确保当用户单击注销按钮时,所有线程都将被终止?当用户注销时,将标志设置为false。线程应检查此标志以停止向前运行 显示一些代码会更有帮助。您可以向正在创建线程的主类添加一个关闭挂钩 这里举个例子: 在主类中添加此行: Runtime.getRuntime().addShutdownHook(新消息()) 静态类消息扩展线程{

我有一个线程,它使用连接池连接,并在数据库上执行查询,该数据库运行约1分钟。在1分钟之前,如果用户注销应用程序,该线程将进入无限循环,并且永远不会释放。
如何确保当用户单击注销按钮时,所有线程都将被终止?

当用户注销时,将标志设置为
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的线程,并正确处理该中断。有关此经常被误解的问题的信息,请参阅(基本上,重置中断线程上的中断标志…)