Что означает прерывание потока в первую очередь?
Это означает, что что-то вызвало Thread.interrupt()
в объекте потока.Это устанавливает флаг interrupted
в потоке и заставляет определенные вызовы метода завершаться с исключением.
Во-вторых, каковы нормальные сценарии, где это может произойти?
Обычно используется, когда второй поток хочет сообщить этому потоку, что он должен прекратить свою работуВызов может быть прямым или библиотечным методом.Например, ThreadPoolExecutor.shutdownNow()
использует прерывания для (попытки) прекращения выполнения задач.
Обратите внимание, что прерывание потока не гарантирует его остановку.Действительно, за исключением случаев, когда выдается исключение, поток заметит, что оно было прервано, только если он вызывает interupted()
или isInterupted()
.Даже тогда он мог просто снять флаг и продолжить, как будто ничего не произошло.
Любой совет относительно того, что может происходить или что я должен делать?
Посмотрите на то, что «контролирует» поток, который был прерван.