На самом деле отладчик Java позволяет вам убить поток, вставив в него исключение. Я просто пытался понять, как использовать эту функцию, чтобы убить поток, не уничтожая весь jvm, когда натолкнулся на этот вопрос. Если вы запускаете jvm с параметрами командной строки, такими как:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 your.app.Main
и подключите отладчик к чему-то вроде:
jdb -attach 127.0.0.1:8888
Вы можете ввести:
threads
, чтобы получить список запущенных потоков, и использовать команду kill, чтобы уничтожить запущенный поток. Ситуация, в которой я сейчас не уверен, это синтаксис этой команды kill, я попробовал очевидное:
kill 0xe2e new java.lang.IllegalArgumentException("er");
и я получаю сообщения:
killing thread: Swank REPL Thread
Thread not suspended
Expression must evaluate to an object
(«Swank REPL Thread» - это нить, которую я хочу уничтожить, и да, я пытался сначала ее приостановить;)
Тем не менее, моя неспособность использовать отладчик Java в стороне, мне кажется, что поток может быть убит наугад. Может быть, вы можете просто убедиться, что игнорируете все исключения и продолжаете работать, и этого будет достаточно, но я не уверен в этом.