В полезной библиотеке я создаю ExecutorServiceShutdown ExecutorService грациозно, когда главный-нить завершает
ExecutorService es = Executors.newSingleThreadExecutor();
Основной поток будет размещать некоторые задачи в этой ExecutorService. Когда основной поток завершен, я хотел бы отключить ExecutorService, чтобы приложение могло выйти.
Проблема в том, что я могу изменить код только в утилите-библиотеке. Один из вариантов, который я рассматривал, - использовать демона-потоки. Но затем он резко прекратит работу, прежде чем задачи, которые будут отправлены в службу, могут завершиться.
Почти работал. :) Если основной поток достаточно хорош, чтобы вызвать System.exit (0); в конце исполнения. Однако пользователям этой библиотеки нельзя доверять :( –
Если конечный пользователь не хочет изящно завершить работу, ему нечего делать. Microsoft, к примеру, знает это очень хорошо. Лучшее, что вы можете сделать, это сохранить некоторые информацию о процессах где-то в [пользовательских префайлах] (http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html) и искать ее, когда программа запускается снова, а затем в конечном итоге сообщите пользователю, как в «Программа, кажется, неожиданно закончилась во время предыдущего запуска, вот некоторые незавершенные процессы [...], вы хотите повторно запустить их?» и т. д. – BalusC
Возможно, есть какой-то способ узнать, что main-thread ничего не осталось выполнить? –