Каждый дал отличную информацию о том, почему бы не вызвать Thread.stop ().
Комментарий Сергея исправил неверную информацию, которую я дал об обработке interrupt (). Я предпочитаю использовать сигнальный флаг, как в ответе lewap. Как сказал Сергей, interrupt () предназначен для пробуждения потока, который находится в заблокированной операции. Если ваш поток не вызывает никаких операций блокировки, тогда interrupt () фактически не завершит поток. Тем не менее, ваш поток может вызвать isInterrupted (), чтобы узнать, было ли вызвано прерывание (в основном, сигнальный флаг).
Возвращаясь к примеру с вашей книгой, мне это не нравится.
if (myThread != null ) {
Thread dummy = myThread;
myThread = null;
dummy.interrupt();
}
В этом примере нет веских оснований для копирования в фиктивную переменную. Вы правы, что запутались.
Авторы книги могут подумать о том, чтобы не допустить одновременной попытки других потоков прервать один и тот же поток, но этот код прерывания не является потокобезопасным (операция «проверить, если ноль и задано значение ноль» не является атомарной), поэтому написание фиктивного задания - это мутная вода без дополнительной безопасности.