"Кажется, есть один или несколько потоков, которые случайно не были прерваны". Я не сказал, что вещи не были прерваны. Вызов Thread.interrupt () не заставляет runnable остановиться. Он устанавливает флаг прерывания и, возможно, заставляет блокирующие операции (например, вызовы Thread.sleep или java.nio) генерировать либо InterruptedException, либо какое-либо другое исключение (например, ClosedByInterruptException для nio). Ваши runnables должны проверить Thread.currentThread (). IsInterrupted () и вести себя хорошо.