Остановка запущенной Java-программы изящно

1

Я искал путь для того, чтобы отправить команду на запущенную Java-программу, но большая часть сообщения предложила реализовать listener или обернуть программу реализацией Jetty (или другого сервера).

Есть ли способ сделать это без добавления дополнительных зависимостей?

Сценарий: у меня есть Java-программа, которая будет работать неограниченно, и которая будет порождать несколько запущенных потоков. Я хотел бы иметь возможность запускать сценарий, чтобы остановить его, когда его нужно закрыть, как это обычно бывает у серверов сценариев выключения. Это позволит мне обрабатывать процесс останова в программе. Программа работает в среде linux.

Спасибо.

  • 0
    Вы имеете в виду программно или просто из консул
  • 0
    Вы можете использовать Socket чтобы сообщить нам процесс, но это предполагает, что процесс прослушивает или, возможно, записывает значение в определенный файл, который отслеживает процесс ...
Показать ещё 3 комментария
Теги:
multithreading

1 ответ

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);
                    }
                }
            });

Спасибо за предложение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню