java中Executor、ExecutorService、ThreadPoolExecutor介绍

参数:

tasks - 任务 collection

返回:

表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同,每个任务都已完成。

抛出:

InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务。

NullPointerException - 如果任务或其任意元素为 null

RejectedExecutionException - 如果所有任务都无法安排执行

注意1

:该方法会一直阻塞直到所有任务完成。

 List<Future>

invokeAll

(Collection<? extends Callable> tasks,

long timeout,

TimeUnit unit)

throws InterruptedException

执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。返回列表的所有元素的 Future.isDone() 为 true。一旦返回后,即取消尚未完成的任务。注意,可以正常地或通过抛出异常来终止已完成 任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:

tasks - 任务 collection

timeout - 最长等待时间

unit - timeout 参数的时间单位

返回:

表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同。

如果操作未超时,则已完成所有任务。如果确实超时了,则某些任务尚未完成。

抛出:

InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务

NullPointerException - 如果任务或其任意元素或 unit 为 null

RejectedExecutionException - 如果所有任务都无法安排执行

注意1

:该方法会一直阻塞直到所有任务完成或超时。

注意2

:如果确实超时了,则某些任务尚未完成。【那么这些尚未完成的任务应该被系统取消】。

 T invokeAny(Collection<? extends Callable> tasks)

throws InterruptedException,

ExecutionException

执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。

如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:

tasks - 任务 collection

返回:

某个任务返回的结果

抛出:

InterruptedException - 如果等待时发生中断

NullPointerException - 如果任务或其任意元素为 null

IllegalArgumentException - 如果任务为空

ExecutionException - 如果没有任务成功完成

RejectedExecutionException - 如果任务无法安排执行

注意1

:该方法会一直阻塞直到有一个任务完成。

注意2

:一旦正常或异常返回后,

则取消尚未完成的任务

 T

invokeAny(Collection<? extends Callable> tasks,

long timeout,

TimeUnit unit)

throws InterruptedException,

ExecutionException,

TimeoutException

执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。

参数:

tasks - 任务 collection

timeout - 最长等待时间

unit - timeout 参数的时间单位

返回:

某个任务返回的结果

抛出:

InterruptedException - 如果等待时发生中断

NullPointerException - 如果任务或其任意元素或 unit 为 null

TimeoutException - 如果在所有任务成功完成之前给定的超时期满

ExecutionException - 如果没有任务成功完成

RejectedExecutionException - 如果任务无法安排执行

注意1

该方法会一直阻塞直到有一个任务完成。

注意2

:一旦正常或异常返回后,

则取消尚未完成的任务

3.ThreadPoolExecutor

ThreadPoolExecutor是ExecutorService的一个实现类,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。

线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。

每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子 (hook)。

但是,强烈建议程序员使用较为方便的 Executors 工厂方法 Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和 Executors.newSingleThreadExecutor()(单个后台线程),

它们均为大多数使用场景预定义了设置。否则,在手动配置和调整此类时,使用以下指导:

核心和最大池大小

ThreadPoolExecutor将根据corePoolSize(参见 getCorePoolSize())和 maximumPoolSize(参见 getMax

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值