Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop uninterruptible threads in Java

I have a Java application that I CAN'T EDIT that starts a java.lang.Thread that has this run() method:

public void run(){
   while(true){
     System.out.println("Something");
   }
}

At a certain point in time I want to stop it. If I use Thread.interrupt() it doesn't work. If I use Thread.stop() it works, but this method is deprecated (so its use is discouraged as it may be removed from JVM in new releases).

How to stop such uninterruptible threads in Java?

like image 713
Marco Vasapollo Avatar asked Dec 03 '22 03:12

Marco Vasapollo


1 Answers

The java debugger will allow you to kill a thread by injecting an exception into it.

Start your Java process and have it listen on some port:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4444 <Your Program>

and connect the debugger with something like:

jdb -attach 127.0.0.1:4444

and issue the following command:

threads

to get a list of the running threads, and use the kill command to kill a running thread.

kill 0xe2e new java.lang.IllegalArgumentException("er");
like image 156
Amir Afghani Avatar answered Dec 20 '22 06:12

Amir Afghani