Java Threads正确发布

时间:2016-06-17 10:33:33

标签: java multithreading

我有一个使用连接池连接的线程,并在运行大约1分钟的db上执行查询。如果用户退出应用程序,则在1分钟之前,此线程将进入无限循环并且永不释放。 如何确保当用户点击退出按钮时,所有线程都将被杀死?

3 个答案:

答案 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(基本上,在被中断的线程上重置中断标志......)