超时后如何取消任务?

编程入门 行业动态 更新时间:2024-10-25 12:21:56
本文介绍了超时后如何取消任务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一些 Task 执行可能会挂起的I / O阻止操作(从 URL 获取文件)

I have some Task execute a I/O blocking operation that can hang (fetching a file from an URL)

task = new Task<List<WSDLOperation>>() { @Override protected List<WSDLOperation> call() { List<WSDLOperation> services = new ArrayList<>(); try { services = WSDLService.createService(wsdlURL).getOperations(); } catch (Exception ex) { LOG.log(Level.WARNING, "Can't reach {0}", wsdlURL); } return services; } }; }

方法 createService 可以永远等待,而不会抛出任何 Exception 。 (我使用Main类中定义的全局(静态公共) ExecutorService 执行任务)。

The method createService can wait forever without throwing any Exception. (I execute the task using a global (static public)ExecutorService defined in Main class).

推荐答案

如何在超时后使用Future和取消任务:

How use future and cancel task after timeout:

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 Test { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Task t = new Task(); Future<String> future = executor.submit(t); try { System.out.println("Started.."); System.out.println(future.get(5, TimeUnit.SECONDS)); // throws // TimeoutException System.out.println("Finished!"); } catch (TimeoutException e) { future.cancel(true); System.out.println("Terminated!"); } } } class Task implements Callable<String> { @Override public String call() throws Exception { for (int i = 0; i < 1000; i++) { Thread.sleep(1000); System.out.println("task running!"); } return "Ready!"; } }

更多推荐

超时后如何取消任务?

本文发布于:2023-11-12 01:46:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1580164.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!