Я использую ExecutorService
(объявлено глобально) для запуска многопоточно в то же время. ExecutorService
займет час, чтобы выполнить задачу. Так что мне нужно получить текущие текущие данные о потоке, такие как активная тема, queued thread и завершена нить.Получайте текущие потоковые объекты из ExecutorService
И когда я убить ExecutorService
, то ExecutorService
убит, но нить работает в фоновом режиме. Поэтому, прежде чем убить ExecutorService, мне нужно получить форму объекта потока ExecutorService
и убить поток вручную, используя loop или итератор.
Для примера:
ExecutorService имеет 5 нитей.
Каждый поток имеет выполнение invokeall(). Каждая нить заканчивается через час.
Но мне нужно остановиться в течение 15 минут, отправив новый запрос на сервер или вызов какой-либо метод.
Здесь выключение или shutdowNow остановить исполнителя, но не те 5 нитей. В этом проблема. Поэтому мне нужно убить эти потоки вручную. Как убить потоки, прикрепленные вручную в службе-исполнителе?
Обычно ваш основной поток будет называть 'awaitTermination()' в основном потоке, который будет эффективно присоединяться к нему и предотвращать завершение до завершения заданий. У вас есть код, который вы пробовали до сих пор? –
Возможный дубликат [Как дождаться окончания всех потоков, используя ExecutorService?] (Http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice) – Sikorski
Не могли бы вы пояснить: нужно ли вам сами * создавать темы * или * задачи * и почему? Как показывают другие комментарии, есть способ узнать, завершил ли исполнитель свою работу, получить количество ожидающих задач, ... и если это ваша цель, то потоки на самом деле являются ** не ** хорошей единицей абстракции для работать вообще. Кроме того, вы не можете убить и выполнить сервис, вы можете только закрыть его, что имеет другое значение для того, что происходит с его задачами, и его потоки. Также нет способа убить потоки на Java (только устаревшие, ненадежные способы) – GPI