How to interrupt a running thread in Java (1)
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..." ); } }
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... .....................
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..." ); } }
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...
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)!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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

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

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

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

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

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

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.

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
