首页 > Java > java教程 > 如何在Java ExecutorService中实现定时任务中断?

如何在Java ExecutorService中实现定时任务中断?

Patricia Arquette
发布: 2024-11-28 01:39:13
原创
694 人浏览过

How Can I Implement Timed Task Interruption in a Java ExecutorService?

通过超时中断 ExecutorService 中的任务

实现一个自定义 ExecutorService 来处理超时后的任务中断可能具有挑战性。然而,Java 并发框架使用 ScheduledExecutorService 提供了一种方便的解决方案。

针对任务超时的 ScheduledExecutorService

ScheduledExecutorService 允许安排任务在指定的延迟后或定期执行间隔。通过利用此功能,您可以创建一个自定义 ExecutorService 来监视提交的任务,并在超过预定义超时时中断它们。

TimeoutThreadPoolExecutor 实现

创建此类任务的一种方法ExecutorService 是 TimeoutThreadPoolExecutor 类,它扩展了标准 ThreadPoolExecutor。它集成了 ScheduledExecutorService (timeoutExecutor) 和并发映射 (runningTasks) 来跟踪正在运行的任务并安排其中断。

TimeoutThreadPoolExecutor 的功能

  • beforeExecute:当任务执行时提交后,会使用 timeoutExecutor 安排中断。返回一个 ScheduledFuture 并存储在 runningTasks 中,将任务映射到其计划中断任务。
  • afterExecute:一旦任务完成,其对应的 ScheduledFuture 就会从 runningTasks 中移除并取消,从而中断任务如果尚未完成。
  • shutdown:优雅关闭同时关闭 ThreadPoolExecutor 和 ScheduledExecutorService。
  • shutdownNow:强制关闭 ThreadPoolExecutor 和 ScheduledExecutorService。

用法

到使用此自定义 ExecutorService,使用所需参数实例化 TimeoutThreadPoolExecutor 并开始提交任务。如果任务尚未完成,将在指定的超时后中断。

使用 Schedule 的替代方法

中断 ExecutorService 中长时间运行的任务的另一种方法是使用ScheduledExecutorService提供的调度方法。您可以提交两个任务:一个执行实际任务,另一个在指定超时后取消任务。

代码示例

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); 
Future handler = executor.submit(new Callable(){ ... });
executor.schedule(new Runnable(){
    public void run(){
        handler.cancel();
    }      
}, 10000, TimeUnit.MILLISECONDS);
登录后复制

此方法允许您执行一个任务,超时时间为 10 秒,超时后该任务将被取消并中断。

以上是如何在Java ExecutorService中实现定时任务中断?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板