Вы можете попросить поток прервать, вызвав Thread.interrupt ()
Обратите внимание, что существует несколько других методов с аналогичной семантикой - stop ( )
и destroy ()
- но они устарели , потому что они небезопасны . Не поддавайтесь искушению использовать их.
Коротко вам нужно Thread.interrupt()
Для более подробной информации смотрите раздел How do I stop a thread that waits for long periods (e.g., для ввода)
в этой статье Почему Thread.stop
, Thread.suspend
, Thread.resume
и Runtime.runFinalizersOnExit
устарели?.
Как сказал Божо, Thread.interrupt () - это общий и правильный способ сделать это. Но помните, что это требует взаимодействия потока; Реализовать поток, игнорирующий запросы прерывания, очень просто.
Чтобы фрагмент кода был прерываемым таким образом, он не должен игнорировать InterruptedException и должен проверять флаг прерывания на каждой итерации цикла (используя Thread.currentThread (). IsInterrupted ()). Кроме того, в нем не должно быть непрерывных операций блокировки. Если такие операции существуют (например, ожидание сокета), вам понадобится более конкретная реализация прерывания (например, закрытие сокета).