正常停止正在运行的java程序

时间:2015-03-27 02:29:15

标签: java linux multithreading

我一直在谷歌搜索一个让我发送命令到正在运行的Java程序的方法,但大多数帖子建议实现listener或用Jetty包装程序(或其他服务器)实现。

有没有办法在不添加其他依赖项的情况下执行此操作?

情节是,我有一个Java程序,它将无限期地运行,并将产生一些正在运行的线程。我希望能够运行一个脚本来阻止它,当它需要关闭时,有点像关机脚本服务器往往有。这将允许我处理程序中的关闭过程。该程序在Linux环境中运行。

谢谢。

1 个答案:

答案 0 :(得分:1)

实现了关闭钩子,到目前为止它看起来不错。实施代码:

final Thread mainThread = Thread.currentThread();
            Runtime.getRuntime().addShutdownHook(new Thread() {
                public void run() {
                    logger.info("Shut down detected. Setting isRunning to false.");

                    if(processors != null && !processors.isEmpty()){
                        for (Iterator<IProcessor> iterator = processors.iterator(); iterator.hasNext();) {
                            IProcessor iProcessor = (IProcessor) iterator.next();
                            iProcessor.setIsRunning(false);
                            try {
                                iProcessor.closeConnection();
                            } catch (SQLException e1) {
                                logger.error("Error closing connection",e1);
                            }
                        }
                    }
                    try {
                        mainThread.join();
                    } catch (InterruptedException e) {
                        logger.error("Error while joining mainthread to shutdown hook",e);
                    }
                }
            });

感谢您的建议。