1

Я бегу фиксированное количество потоков с использованием newFixedThreadPool() и должны быть в состоянииКак узнать, какой конкретный runnable умер в моем threadPoolExecutor?

  1. знаю, когда один из runnables умер, и
  2. знать, какие именно работоспособной был один, который умер.

Одним из решений для этого было обертывание Runnables как объект Thread и вызов isAlive(). Потоки выполнялись так, как они должны были, но так как aThread.start() никогда не вызывал исполнитель, всегда возвращался false, что бесполезно для меня. Я считал, что запуск Runnables вызывает флаг в начале функции run(), как и предлагалось this question's answer. Что было бы лучшим способом отслеживать Runnables, которые умерли? Потому что мое намерение состоит в том, чтобы передать исполнителю поток, который по существу будет делать то же самое, что и тот, который умер.

+0

Или эти runnables должны бежать бесконечно? Или это 1 выстрел? –

+0

они работают бесконечно до тех пор, пока исполнитель не вызовет 'shutdown' –

+0

По существу, служба-исполнитель управляет потоками, периодом. Пользователи, управляющие потоками, были проблемой, поскольку были изобретены потоки. Я поддерживаю менеджер потоков и написал эту статью несколько лет назад. Возможно, это может вам помочь: http://coopsoft.com/ar/j2searticle.html – edharned

ответ

0

Возможно, вы можете использовать Thread.getState().

И вот диаграмма состояния для потоков. http://bighai.com/ppjava/?p=144

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#getState()

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.State.html

+0

Я мог бы это сделать, если бы использовал «Thread», но im использовал «Runnable». «getState» не может быть доступен Runnable. –

+0

Пожалуйста, прочитайте эту ссылку http://www.avajava.com/tutorials/lessons/how-do-i-determine-if-a-thread-is-alive-or-not.html – vk3105

1

После просмотра документации @ vk3105 предоставленной у меня была идея. Я закончил тем, что посмотрел на this и внедрил Future future = executorService.submit(aRunnable), чтобы я мог проверить, был ли этот runnable завершен или нет, используя future.isDone() или если Runnable был отменен до его завершения. future.isCancelled().

 Смежные вопросы

  • Нет связанных вопросов^_^