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