Интересно, есть ли какой-нибудь аккуратный и чистый способ отключения исполнителей потоков приложения, когда основное окно закрывается.Завершение потоков JavaFX при выходе приложения
Если потоки отмечены как потоки демона, они автоматически прерываются, когда приложение закрывается. Но в моем случае я не хочу этого делать. если задание записывает файл, я хочу, чтобы задача завершилась, и поток был остановлен только после завершения задачи, иначе я закончил с поврежденным файлом.
Возможное решение может использовать каждый исполнитель только один раз и вызывать его завершение после отправки задачи, но у этого есть накладные расходы на создание нового потока каждый раз, когда должна быть отправлена новая задача.
В моем текущем приложении, имеющем только один контроллер, я использую событие onClose главного окна, чтобы вызвать метод в контроллере для выключения исполнителя, если он есть (код ниже). Но это не чистое решение, если есть много контроллеров.
MainController controller = loader.getController();
stage.setOnCloseRequest(ev -> {
controller.finalize();
});
Может ли кто-нибудь разработать лучший?
Если есть много контроллеров, не должны они одни и те же исполнителя в любом случае ? –
Хорошая точка @James_D, но я спрашиваю, что, если мне нужно больше одного. Как только я придумал ужасное приложение, которое использовало пул потоков для загрузки данных из нескольких URL-адресов, но для записи результатов потребовалось только один поток, или это испортило бы их последовательность. –