Teachnique
      CourseRoadmaps
      Login

      OverviewHistoryFeaturesJava 8 - New Featuresvs C++Virtual Machine(JVM)JDK vs JRE vs JVMHello World ProgramEnvironment SetupBasic SyntaxVariable TypesData TypesType CastingUnicode SystemBasic OperatorsCommentsStreamsNew Date-Time API

      Loop ControlDecision Makingif-else Statementswitch statementfor loopfor each Loopwhile Loopdo...while Loopbreak Statementcontinue Statement

      OOPs (Object-Oriented Programming) ConceptsObject and ClassesClass AttributesClass MethodsMethodsVariable ScopesConstructorsAccess ModifiersInheritanceAggregationPolymorphismOverridingMethod OverloadingDynamic BindingStatic BindingInstance Initializer BlockAbstractionEncapsulationInterfacesPackagesInner classesStatic ClassesAnonymous ClassesSingleton ClassWrapper ClassesEnum Class

      Number ClassBoolean classCharacter ClassArraysMath Class

      File ClassCreating FilesWrite To FilesReading FileDelete FilesDirectory OperationsFiles and I/O

      ExceptionsTry Catch BlockTry with ResourcesMultiple Catch BlocksNested Try BlockFinally BlockThrows and Throw | Throw an ExceptionException PropagationBuilt-in ExceptionsCustom Exception

      MultithreadingThread Life CycleCreating a ThreadStarting a ThreadJoining ThreadsNaming a Thread with ExamplesScheduling Threads with ExamplesThread PoolsMain ThreadThread PriorityDaemon ThreadThreadGroup ClassJVM Shutdown Hook

      Thread SynchronizationBlock SynchronizationStatic SynchronizationInter Thread CommunicationThread DeadlockInterrupting ThreadThread ControlReentrant Monitor

      NetworkingSocket ProgrammingURL ProcessingURL ClassURLConnection ClassHttpURLConnection ClassSocket Class with ExamplesGenerics

      Collections FrameworkCollection Interface

      List InterfaceArrayList Class

      Queue InterfaceArrayDeque Class

      Map InterfaceSortedMap Interface

      Set InterfaceSortedSet Interface

      Data Structures Enumeration Interface BitSet Class

      How to Use Iterator?How to Use Comparator?How to Use Comparable?

      RecursionRegular ExpressionsSerializationString ClassJava Arrays - Class

      Feedback

      Submit request if you have any questions.

      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

      The Thread class provides three methods for interrupting a thread
      • void interrupt() − Interrupts the thread.
      • static boolean interrupted() − Tests whether the current thread has been interrupted.
      • boolean isInterrupted() − Tests whether the thread has been interrupted.

      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 started
      Main Thread finished
      [Thread-0] Message 0
      This thread was interruped by someone calling this Thread.interrupt()
      Cancelling task running in thread Thread-0
      After 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 started
      Main Thread finished
      [Thread-0] Message 0
      This 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 started
      Main Thread finished
      [Thread-2] Uninterrupted
      [Thread-0] Interrupted
      [Thread-1] Uninterrupted