I want to interrupt a thread, but invoking interrupt()
doesn't seem to work. Below is the sample code:
public class BasicThreadrRunner {
public static void main(String[] args) {
Thread t1 = new Thread(new Basic(), "thread1");
t1.start();
Thread t3 = new Thread(new Basic(), "thread3");
Thread t4 = new Thread(new Basic(), "thread4");
t3.start();
t1.interrupt();
t4.start();
}
}
class Basic implements Runnable{
public void run(){
while(true) {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.err.println("thread: " + Thread.currentThread().getName());
//e.printStackTrace();
}
}
}
}
but the output looks like thread 1 is still running. Can anyone explain this as well as how interrupt()
works? Thanks!
The thread is still running simply because you catch InterruptedException
and keep running. interrupt()
primarily sets a flag in the Thread
object, which you can check with isInterrupted()
. It also causes some methods -- sleep()
, join
Object.wait()
, in particular -- to return immediately by throwing an InterruptedException
. It also causes some I/O operations to immediately terminate. If you're seeing the printouts from your catch
block, then you can see that interrupt()
is working.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With