搜索
首页Javajava教程如何使用 ExecutorService 在 Java 中设置线程超时?

How to Set a Timeout for a Thread in Java Using ExecutorService?

如何为线程设置超时

正如最初询问中提出的,存在一个关于如何限制线程执行的问题时间。目标是处理线程可能进入无限循环、导致父线程无限期等待的情况。

讨论的一个解决方案涉及在线程的 run() 方法中使用 TimerTask。然而,更有效的方法是利用 ExecutorService 类。这提供了一种在线程上设置超时的便捷机制。

使用 ExecutorService 的示例实现可以如下所示:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TimeoutTest {
    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();
    }
}

class Task implements Callable<string> {
    @Override
    public String call() throws Exception {
        Thread.sleep(4000); // Simulate a long-running task that takes 4 seconds
        return "Ready!";
    }
}</string></string>

在此示例中,Task 类封装了长-运行任务。 ExecutorService.submit() 方法用于提交此任务以供执行。 Submit() 返回的 Future 对象提供了一种检索任务结果的机制。

使用 3 秒的超时参数调用 Future.get() 方法。如果任务在此时间范围内完成,则返回结果。但是,如果任务花费的时间超过 3 秒,则会引发 TimeoutException。在 catch 块中,任务被取消并显示“终止!”

此外,需要注意的是,在长时间运行的任务中,应该合并检查来处理中断,防止任务无限期地运行。此检查可以使用 Thread.interrupted() 来实现。

以上是如何使用 ExecutorService 在 Java 中设置线程超时?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何在Java中使用easypoi.excel库动态配置实体类注解参数以适应不同环境?如何在Java中使用easypoi.excel库动态配置实体类注解参数以适应不同环境?Apr 19, 2025 pm 07:24 PM

如何在Java中动态配置实体类注解参数?在Java开发中,我们经常会遇到需要根据不同的环境动态配置某些参数的�...

为什么在使用Netty开发WebSocket服务器时,浏览器未能正确处理401状态码?为什么在使用Netty开发WebSocket服务器时,浏览器未能正确处理401状态码?Apr 19, 2025 pm 07:21 PM

在使用Netty开发WebSocket服务器时,可能会遇到浏览器在尝试连接时未能正确处理服务器返回的401状态码的情况。�...

Java编译失败:javac命令无法生成class文件怎么办?Java编译失败:javac命令无法生成class文件怎么办?Apr 19, 2025 pm 07:18 PM

Java编译失败:运行窗口javac命令无法生成class文件许多Java初学者在学习过程中都会遇到这样的问题:在运行窗口...

后端开发中的分层架构如何正确划分业务逻辑和非业务逻辑?后端开发中的分层架构如何正确划分业务逻辑和非业务逻辑?Apr 19, 2025 pm 07:15 PM

探讨后端开发中的分层架构问题在后端开发中,常见的分层架构包括controller、service和dao...

Java编译报错:移动类文件后,包声明与访问权限是如何变化的?Java编译报错:移动类文件后,包声明与访问权限是如何变化的?Apr 19, 2025 pm 07:12 PM

Java中的包与目录:编译器报错背后的逻辑在Java开发中,经常会遇到包和目录的问题。本文将深入探讨Java...

JWT适合动态权限变更场景吗?JWT适合动态权限变更场景吗?Apr 19, 2025 pm 07:06 PM

JWT与Session的选择:动态权限变更下的权衡许多初学者对JWT和Session...

如何在宝塔nginx中正确配置apple-app-site-association文件以避免404错误?如何在宝塔nginx中正确配置apple-app-site-association文件以避免404错误?Apr 19, 2025 pm 07:03 PM

如何在宝塔nginx中正确配置apple-app-site-association文件?最近,公司iOS部门发送了一个apple-app-site-association文件,并...

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。