(java) java ExecutorService Callable 任务停止和状态

java 并发框架中,使用ExecutorService运行任务,如果是Callable的任务
如何终止耗时比较久的任务如网络连接,而且Callable任务好像没有Runnable可以查看状态

怎样为每个Callable任务设置超时,超时后停止任务

不像Runnable可以检测到中断信息,还是Callable也可以?

// 距提问的时间虽久,但还是把回答写下来,以供大家参考。

Callable任务设置超时的可行做法如下:

I. 保留提交任务时所返回的Future对象

Future<Object> future = exec.submittask;

II. 设置等待任务返回结果的超时时间

int timeout = 5;
future.gettimeout, TimeUnit.SECONDS;

III. 处理超时异常

完整示例代码如下:

import java.util.concurrent.*; public class App { public static void mainString[] args { ExecutorService exec = Executors.newSingleThreadExecutor; Callable<Object> task = new Callable<Object> { @Override public Object call throws Exception { for int i = 0; i < 10; i++ { // 任务需要运行10秒钟 TimeUnit.SECONDS.sleep1; } return "task result."; } }; // 保留提交任务时所返回的`Future`对象 Future<Object> future = exec.submittask; try { // 设置等待任务返回结果的超时时间 int timeout = 5; Object result = future.gettimeout, TimeUnit.SECONDS; System.out.printlnresult; } catch InterruptedException e { e.printStackTrace; } catch ExecutionException e { e.printStackTrace; } catch TimeoutException e { // 处理超时异常 System.err.println"超时了"; } exec.shutdown; } }

发表评论

电子邮件地址不会被公开。 必填项已用*标注