Я использую ThreadPoolExecutor
для запуска потоков.Java - Получить состояние нити
ExecutorService executorService = Executors.newCachedThreadPool();
Future<?> future = executorService.submit(new MyRunnable());
Основываясь на некоторых условиях, мне нужно закончить длинную текущую нить и начать тот же экземпляр нити снова (для некоторых операций по очистке).
Поскольку у меня есть будущий объект потока, я могу легко проверить, работает ли он еще.
future.isDone()
Если он работает, я могу послать сигнал прерывания с помощью
future.cancel(true);
В MyRunnable
классе, сигнал прерывания обрабатывается. Но это условие проверяется в начале цикла.
Проблема future.isDone()
возвращает true, как только сигнал прерывания отправляется. Но мне нужно подождать, пока экземпляр потока действительно будет завершен.
Есть ли способ проверить, действительно ли поток работает/завершен?
Если вы звоните 'future.cancel (истина) 'поток остановится, чтобы он не завершился. –
Что вы подразумеваете под «* дождитесь завершения экземпляра потока. *"? Нитки в пуле потоков перерабатываются, поэтому, если есть неперехваченное исключение, сам поток не будет завершен ... – assylias