Как изящно остановить проблемную нить Java ExecutorService? - PullRequest
1 голос
/ 09 апреля 2020

Я отправляю вызываемые элементы в executorService (fixedThreadPool).

и сохраняю ссылку на поток в вызываемом объекте.

Теперь проблема заключается в том, что в этих потоках я звоню кому-то метод обратного вызова else (предположим, что у нас есть jar с одним интерфейсом, и реализация этого интерфейса выполняется целевым продуктом), поэтому в основном я не имею никакого контроля над тем, что другой продукт делает в этом потоке. поэтому иногда случается, что из-за некоторых проблем с соединением сокетов этот поток зависает на неопределенное время, и вот, вот проблема, которую я не хочу ждать до конца этого потока. Я хочу грациозно завершить этот поток.

Я пытался с thread.interrupt (), но он может прерывать только заблокированные, ожидающие и спящие потоки. Работающий или рабочий поток не может быть прерван этим. (Примечание: я могу принудительно завершить этот поток с помощью thread.stop (), но так как это не рекомендуется, я не хочу этого делать, я ищу изящное решение)

Теперь давайте скажем это Это нормально, что я не могу убить этот поток из-за некоторых ограничений, но проблема здесь в том, что если я буду вызывать future.cancel (true) для своей будущей задачи, я не смогу освободить этот поток из пула моих исполнителей, в основном я не могу больше использовать эту задачу executor (здесь в основном у меня есть ссылка на службу executor stati c, которая была повторно использована в l oop), я даже пытался использовать executorService.shutdown и shutdownNow, так как ничто не могло освободить этот поток от executor service.

поэтому есть ли способ изящно завершить этот поток и освободить его от службы executor.

...