Что происходит с runnables, которые висят в threadpoolexecutor? - PullRequest
0 голосов
/ 16 июля 2011

Если работающий модуль зависает во время работы в threadpoolexecutor, есть ли способ узнать, что он завис, и уничтожить исполняемый файл? Будет ли метод getActiveCount считать исполняемый файл, который висит, как «активно выполняемый»?

1 Ответ

4 голосов
/ 16 июля 2011

Не существует безопасного способа уничтожения занятого потока (кроме запуска его в другом процессе и его уничтожения). Вы можете определить, занимает ли поток много времени, ожидая результата с таймаутом. Вы также можете добавить задачу, чтобы отменить задачу после истечения времени ожидания, однако это будет только прерывать задачу потока, но не уничтожать ее.

Вам лучше определить, почему задача "зависает", и исправить код, чтобы она не выполнялась.

Когда вы запускаете задачу, вы сохраняете Thread.currentThread () как переменную общего доступа. Затем вы можете периодически использовать getStackTrace (), чтобы определить, что он делает, и записать его в журнал.

...