Home Java javaTutorial How to interrupt a running thread in Java (1)

How to interrupt a running thread in Java (1)

Dec 30, 2016 pm 01:19 PM
java

Multi-threading presents a new set of problems for programmers during the programming process, and how to interrupt a running thread is one of the problems. In this article, the author will describe related methods.

The procedure is very simple. However, multithreading presents a new set of challenges for programmers that, if not addressed appropriately, can lead to unexpected behavior and subtle, hard-to-find errors.

In this article, we address one of these problems: how to interrupt a running thread.

Background interrupting a thread means stopping everything the thread is doing before it completes its task, effectively aborting its current operation. Whether the thread dies, waits for a new task, or continues to the next step depends on this program. While it may seem simple at first, you must take some forewarning to achieve the desired results. You'd better keep the following warnings in mind.

First of all, forget about the Thread.stop method. Although it does stop a running thread, however, this method is unsafe and not recommended, which means that in a future version of Java, it will no longer exist.

Some rash fellows may be fooled by another method, Thread.interrupt. Despite what its name seems to imply, however, this method does not interrupt a running thread (more on this later), as described in Listing A. It creates a thread and tries to stop it using the Thread.interrupt method. The call to the Thread.sleep() method provides ample time for the thread to initialize and terminate. The thread itself does not participate in any useful operations.

class Example1 extends Thread {
            boolean stop=false;
            public static void main( String args[] ) throws Exception {
            Example1 thread = new Example1();
            System.out.println( "Starting thread..." );
            thread.start();
            Thread.sleep( 3000 );
            System.out.println( "Interrupting thread..." );
            thread.interrupt();
            Thread.sleep( 3000 );
            System.out.println("Stopping application..." );
            //System.exit(0);
            }
            public void run() {
            while(!stop){
            System.out.println( "Thread is running..." );
            long time = System.currentTimeMillis();
            while((System.currentTimeMillis()-time < 1000)) {
            }
            }
            System.out.println("Thread exiting under request..." );
            }
            }
Copy after login

If you run the code in Listing A, you will see the following output on the console:

Starting thread...
Thread is running...
Thread is running...
Thread is running...
Interrupting thread...
Thread is running...
Thread is running...
Thread is running...
Stopping application...
Thread is running...
Thread is running...
Thread is running...
.....................
Copy after login

Even after Thread.interrupt() is called, the thread continues to run .

Really interrupting a thread

The best and most recommended way to interrupt a thread is to use a shared variable to signal that the thread must stop the running task. The thread must periodically check this variable (especially during redundant operations) and then terminate the task in an orderly manner. Listing B describes this approach.

Listing B
class Example2 extends Thread {
  volatile boolean stop = false;
  public static void main( String args[] ) throws Exception {
    Example2 thread = new Example2();
   System.out.println( "Starting thread..." );
   thread.start();
   Thread.sleep( 3000 );
   System.out.println( "Asking thread to stop..." );
   thread.stop = true;
   Thread.sleep( 3000 );
   System.out.println( "Stopping application..." );
   //System.exit( 0 );
  }
  public void run() {
    while ( !stop ) {
     System.out.println( "Thread is running..." );
      long time = System.currentTimeMillis();
      while ( (System.currentTimeMillis()-time < 1000) && (!stop) ) {
      }
    }
   System.out.println( "Thread exiting under request..." );
  }
}
Copy after login

Running the code in Listing B will produce the following output (note how the threads exit in an orderly manner)

Starting thread...
Thread is running...
Thread is running...
Thread is running...
Asking thread to stop...
Thread exiting under request...
Stopping application...
Copy after login

Although this method requires some coding, it is not difficult to implement. At the same time, it gives the threads a chance to do the necessary cleanup work, which is absolutely necessary in any multi-threaded application. Make sure to define the shared variable as volatile or enclose all access to it in synchronized blocks/methods.

So far so good! But what happens when a thread is blocked waiting for some event to occur? Of course, if the thread is blocked, it cannot check the shared variables and cannot stop. This happens in many situations, such as when calling Object.wait(), ServerSocket.accept(), and DatagramSocket.receive(), just to name a few.

They may all block the thread permanently. Even if a timeout occurs, it is not feasible and appropriate to continue waiting before the timeout expires. Therefore, some mechanism must be used to allow the thread to exit the blocked state earlier.

Unfortunately, there is no such mechanism that works in all situations, but specific techniques can be used depending on the situation. In the following links, I will answer the most common examples.

The above is the content of how to interrupt a running thread (1) in Java. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Random Number Generator in Java Random Number Generator in Java Aug 30, 2024 pm 04:27 PM

Guide to Random Number Generator in Java. Here we discuss Functions in Java with examples and two different Generators with ther examples.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Smith Number in Java Smith Number in Java Aug 30, 2024 pm 04:28 PM

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Java Program to Find the Volume of Capsule Java Program to Find the Volume of Capsule Feb 07, 2025 am 11:37 AM

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

See all articles