Course
Interrupting Thread
Java Tutorial
This Java tutorial is tailored for newcomers, offering a journey from basic principles to complex Java programming techniques. Completing this tutorial equips you with a solid understanding of Java, preparing you for advanced learning. You'll emerge ready to tackle the challenges of becoming a top-tier software engineer, with the skills to innovate and excel in the vast world of software development.
Interrupting Thread
Interrupting a Thread in Java
A thread can send an interrupt signal to JVM to interrupt by invoking interrupt on the Thread object for the thread to be interrupted. This means interruption of a thread is caused by any other thread calling the interrupt() method.
Methods for Interrupting a Thread
Example of Interrupting a Java Thread
In this example, we're creating a Task object which has implemented Runnable interface to act as a thread. Using start() method, we've started the thread. As next statement, we're interrupting the thread using interrupt() method and we're printing thread properties in run() method.
package com.tutorialspoint;
public class TestThread { public static void main(String[] args) { System.out.println("Thread main started"); final Task task = new Task(); final Thread thread = new Thread(task); thread.start(); thread.interrupt(); // calling interrupt() method System.out.println("Main Thread finished"); }}class Task implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("[" + Thread.currentThread().getName() + "] Message " + i); if(Thread.interrupted()) { System.out.println("This thread was interruped by someone calling this Thread.interrupt()"); System.out.println("Cancelling task running in thread " + Thread.currentThread().getName()); System.out.println("After Thread.interrupted() call, JVM reset the interrupted value to: " + Thread.interrupted()); break; } } }}
Output
Thread main startedMain Thread finished[Thread-0] Message 0This thread was interruped by someone calling this Thread.interrupt()Cancelling task running in thread Thread-0After Thread.interrupted() call, JVM reset the interrupted value to: false
Example of Interrupting a Java Thread with InterruptedException Handling
In this example, we're handling the interruption and continuing the thread. We're creating a Task object which has implemented Runnable interface to act as a thread. Using start() method, we've started the thread. As next statement, we're interrupting the thread using interrupt() method and we're handling InterruptedException in run() method and printing the details.
package com.tutorialspoint;
public class TestThread { public static void main(String[] args) { System.out.println("Thread main started"); final Task task = new Task(); final Thread thread = new Thread(task); thread.start(); thread.interrupt(); // calling interrupt() method System.out.println("Main Thread finished"); }}class Task implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("[" + Thread.currentThread().getName() + "] Message " + i); try { Thread.sleep(50); } catch (InterruptedException e) { System.out.println("This thread was interruped by someone calling this Thread.interrupt()"); } } }}
Output
Thread main startedMain Thread finished[Thread-0] Message 0This thread was interruped by someone calling this Thread.interrupt()[Thread-0] Message 1[Thread-0] Message 2[Thread-0] Message 3[Thread-0] Message 4
Example of Checking Whether Thread is Interrupted or Not
In this example, we're showcasing multiple threads and use of interrupted() method to check if a thread is interrupted or not. We're creating multiple Task objects which has implemented Runnable interface to act as a thread. Using start() method, we've starting the threads. Then, we're interrupting a thread using interrupt() method and using interrupted in run() method, we're printing the details.
package com.tutorialspoint;
public class TestThread { public static void main(String[] args) { System.out.println("Thread main started"); final Task task1 = new Task(); final Thread thread1 = new Thread(task1); final Task task2 = new Task(); final Thread thread2 = new Thread(task2); final Task task3 = new Task(); final Thread thread3 = new Thread(task3); thread1.start(); thread2.start(); thread3.start(); thread1.interrupt(); // calling interrupt() method System.out.println("Main Thread finished"); }}class Task implements Runnable { @Override public void run() { if(Thread.interrupted()) { System.out.println("[" + Thread.currentThread().getName() + "] Interrupted "); }else { System.out.println("[" + Thread.currentThread().getName() + "] Uninterrupted "); } }}
Output
Thread main startedMain Thread finished[Thread-2] Uninterrupted [Thread-0] Interrupted [Thread-1] Uninterrupted