Java多线程(10) 控制任务组

概述

执行器服务作为线程池,不仅仅可以提高执行任务的效率,还可以控制一组相关任务。例如,可以在执行器中使用shutdownNow方法取消所有的任务。

控制任务组
java.util.concurrent.ExecutorService 

T invokeAny(Collection<Callable<T>> tasks)
T invokeAny(Collection<Callable<T>> tasks, long timeout,TimeUnit unit)
// 执行给定的任务,返回其中一个任务的结果(程序任意一个已完成的结果)。
// 第二个方法若发生超时,抛出一个TimeOutException异常
List<Future<T>> invokeAll(Collection<Callable<T>> tasks)
List<Future<T>> invokeAll(Collection<Callable<T>> tasks,long timeout, TimeUnit unit)
// 执行给定的任务,返回所有的结果。第二个方法若发生超时,抛出一个Timeout Exception异常


java.util.concurrent.ExecutorCompletionService<V>

ExecutorCompletionService(Executor e)
// 构建一个执行器完成服务来收集给定执行器的结果
Future<V> submit(Callable<V> task)
Future<V> submit(Runnable task,V result) 
// 提交一个任务给底层的执行器
Future<V> take()
// 移除下一个已完成的结果,如果没有任何已完成的结果可用则阻塞
Future<V> poll()
Future<V> poll(long time,TimeUnit unit)
//移除下一个已完成的结果,如果没有已完成的结果可用则返回null。第二个方法将等待给定的时间。

PS:其中invokeAll有个特殊的地方就是:如果其创建3个任务,他会新建2个子线程,然后剩下的任务会继续在本线程去执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值