Home > Java > javaTutorial > How to Precisely Timeout a Thread in Java?

How to Precisely Timeout a Thread in Java?

Mary-Kate Olsen
Release: 2024-12-19 00:18:16
Original
837 people have browsed it

How to Precisely Timeout a Thread in Java?

Timeout a Thread with Precision

To establish a time limit for a thread, consider using ExecutorService rather than Timer. ExecutorService offers a flexible solution for controlling a thread's execution within a specified duration.

Here's a refined code snippet using ExecutorService:

import java.util.concurrent.*;

public class ThreadTimeout {

    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new Task());

        try {
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }

        executor.shutdownNow();
    }

    static class Task implements Callable<String> {
        @Override
        public String call() throws Exception {
            // Your long-running task should go here.
            return "Ready!";
        }
    }
}
Copy after login

By leveraging Future#get(), you can establish a timeout for the task. If the task finishes within that time, the result is retrieved as expected. However, if it fails to complete within the allotted time, the catch block is executed, allowing you to cancel the task.

Clarification on the sleep() Usage

The inclusion of sleep() in the provided example is solely for demonstration purposes. It's intended to simulate a long-running task within the SSCCE. In your actual scenario, replace sleep() with your desired long-running task.

To avoid potential deadlocks, it's crucial to periodically check within the long-running task whether your thread has been interrupted, as seen in the following code snippet:

while (!Thread.interrupted()) {
    // Perform your long-running task here.
}
Copy after login

This methodical approach will ensure that your thread responds promptly to interruption requests and gracefully terminates upon timeout.

The above is the detailed content of How to Precisely Timeout a Thread in Java?. For more information, please follow other related articles on the PHP Chinese website!

source: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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template