美文网首页
通过Future来取消任务

通过Future来取消任务

作者: felix_feng | 来源:发表于2016-08-11 10:37 被阅读33次

向ExecutorService提交了任务,并通过定时的Future.get获得结果。如果get终止于一个TimeoutExeception,那么任务是由Future取消的,如果深层计算在取消前就抛出一个异常,在timedRun中会重新被抛出。

Future有一个cancel方法,它需要一个boolean类型的参数,mayInterruptIfRunning,它的返回值表示取消尝试是否成功。当mayInterruptIfRunning为true,并且任务当前正在运行一些线程中,那么这个线程是应中断的。把这个参数设为false意味着如何还没启动,就不要运行这个事务了。

public static void timedRun(Runnable r,long timeout,TimeUnitunit)

throws InterruptedException{

Futuretask=taskExec.submit(r);

try{

      task.get(timeout,unit);

}

catch (TimeoutExceptione){

 //下面任务会被取消

}

catch (ExecutionExceptione){

//task中抛出的异常;重抛出

throw launderThrowable(e.getCause());

}

finally{

   //如果任务已经结束,是无害的

    task.cancerl(true);

}

}

相关文章

  • 通过Future来取消任务

    向ExecutorService提交了任务,并通过定时的Future.get获得结果。如果get终止于一个Time...

  • 探索 JUC 之美---Future 与 FutureTask

    Future Future 表示一个任务的生命周期,是一个可取消的异步运算。提供了相应的方法来判断任务状态(完成或...

  • Future

    Future Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、...

  • Future

    Future设计的思想 避免等待线程结果造成堵塞,通过提交任务后返回Future,来异步管理任务的计算结果。 Fu...

  • 线程池任务超时

    往线程池提交(submit)任务,会把任务封装成FutureTask然后提交,返回future。如果要取消任务,用...

  • FutureTask 源码分析

    FutureTask是一个支持取消行为的异步任务执行器。该类实现了Future接口的方法。如: 取消任务执行 查询...

  • 自定义FutureTask实现

    FutureTask FutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查...

  • ForkJoin实现分而治之

    对于简单的并行任务可以通过"线程池+Future"方案来解决。 如果任务额之间有聚合关系(AND聚合或者OR聚合)...

  • Fork/Join

    对于简单的并行任务,你可以通过“线程池 +Future”的方案来解决;如果任务之间有聚合关系,无论是 AND 聚合...

  • Fork/Join

    对于简单的并行任务,可以通过"线程池+Future"的方案来解决;如果任务之间有聚合关系,无论是AND聚合还是OR...

网友评论

      本文标题:通过Future来取消任务

      本文链接:https://www.haomeiwen.com/subject/kkzjsttx.html