Interrupting a Thread in Java

17 Dec, 2021
In Java Threads, if any thread is in sleeping or waiting state (i.e. sleep() or wait() is invoked), calling the interrupt() method on the thread, breaks out the sleeping or waiting state throwing InterruptedException. If the thread is not in the sleeping or waiting state, calling the interrupt() method performs normal behavior and doesn’t interrupt the thread but sets the interrupt flag to true. 
interrupt() method: If any thread is in sleeping or waiting for a state then using the interrupt() method, we can interrupt the execution of that thread by showing InterruptedException. A thread that is in the sleeping or waiting state can be interrupted with the help of the interrupt() method of Thread class.
Example: Suppose there are two threads and If one of the threads is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive an InterruptedException, which gives the chance to another thread to execute the corresponding run() method of another thread which results into high performance and reduces the waiting time of the threads.
Case 1: Interrupting a thread that doesn’t stop working: In the program, we handle the InterruptedException using try and catch block, so whenever any thread interrupts the currently executing thread it will come out from the sleeping state but it will not stop working. 
Java
// Java Program to illustrate the// concept of interrupt() method// while a thread does not stops working  class MyClass extends Thread {    public void run()    {        try {            for (int i = 0; i < 5; i++) {                System.out.println("Child Thread executing");                  // Here current threads goes to sleeping state                // Another thread gets the chance to execute                Thread.sleep(1000);            }        }        catch (InterruptedException e) {            System.out.println("InterruptedException occur");        }    }}  class Test {    public static void main(String[] args)            throws InterruptedException    {        MyClass thread = new MyClass();        thread.start();          // main thread calls interrupt() method on        // child thread        thread.interrupt();          System.out.println("Main thread execution completes");    }}
Main thread execution completes
Child Thread executing
InterruptedException occur
Case 2: Interrupting a thread that stops working: In the program, after interrupting the currently executing thread, we are throwing a new exception in the catch block so it will stop working.
Java
// Java Program to illustrate the// concept of interrupt() method// while a thread stops working  class Geeks extends Thread {    public void run()    {        try {            Thread.sleep(2000);            System.out.println("Geeksforgeeks");        }        catch (InterruptedException e) {            throw new RuntimeException("Thread " +                                    "interrupted");        }    }    public static void main(String args[])    {        Geeks t1 = new Geeks();        t1.start();        try {            t1.interrupt();        }        catch (Exception e) {            System.out.println("Exception handled");        }    }}
Output
Exception in thread "Thread-0" java.lang.RuntimeException: Thread interrupted
    at Geeks.run(File.java:13)
Case 3: Interrupting a thread that works normally: In the program, there is no exception occurred during the execution of the thread. Here, interrupt only sets the interrupted flag to true, which can be used by Java programmers later. 
Java
// Java Program to illustrate the concept of// interrupt() method  class Geeks extends Thread {    public void run()    {        for (int i = 0; i < 5; i++)            System.out.println(i);    }    public static void main(String args[])    {        Geeks t1 = new Geeks();        t1.start();        t1.interrupt();    }}
0
1
2
3
4
This article is contributed by Bishal Kumar Dubey. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
nishkarshgandhi
Java-Multithreading
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Interfaces in Java
ArrayList in Java
Collections in Java
Multidimensional Arrays in Java
Stream In Java
Set in Java
Singleton Class in Java
Initializing a List in Java
Stack Class in Java
Introduction to Java