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

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

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











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

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

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

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.
