Java线程池 ExecutorService 所有抽象方法源码学习

继承关系

继承自 Executor 接口
在这里插入图片描述

Executor 接口中

在这里插入图片描述
该方法的介绍

在将来的某个时间执行给定的命令。命令可以在新线程、池线程或调用线程中执行,具体取决于{@code Executor}实现

ExecutorService 中 各方法的介绍以及定义

  1. void shutdown();

介绍如下:
启动有序关机,在此关机过程中,将执行以前提交的任务,但不会接受新任务。如果调用已关闭,则不会产生额外效果。

理解: 即当执行该方法后,会去执行前面通过 submit 提交的任务,并且不再接收后面再 submit 的任务,如果已经执行完成则什么都不做。

  1. List< Runnable > shutdownNow();

介绍如下:
尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。
此方法不等待正在执行的任务终止。使用 {@link#waittermination waittermination} 来这样做。
除了尽最大努力停止处理正在执行的任务之外,没有其他保证。例如,典型的实现将通过 {@link Thread#interrupt} 取消,因此任何未能响应中断的任务可能永远不会终止。

理解: 即尝试强行终止正在执行的任务,并将未开始执行的任务返回,尝试强行终止的过程中如果任务未能响应终止,那么就可能一直执行下去而不停止。

  1. boolean isShutdown();

介绍如下:
如果执行已经被关闭返回 true

  1. boolean isTerminated();

介绍如下:
如果关闭后所有任务都已完成,则返回{@code-true}。
请注意{@code-isTerminated}永远不会是{@code-true},除非首先调用了{@code-shutdown}或{@code-shutdownNow}。

理解: 当调用了 shutdown 或者 shutdownNow 方法后,如果所有任务都完成则返回 true 否则永远不是 true

  1. boolean awaitTermination(long timeout, TimeUnit unit)
    throws InterruptedException;

介绍如下:
阻塞,直到所有任务在 shutdown 请求后完成执行,或超时发生,或当前线程中断,以先发生的为准。
timeout:最大等待时间
unit: 等待时间的单位

return {@code true} 如果此执行器终止
return {@code false} 如果终止前超时已过

如果在等待时被中断,则抛出异常

理解: 会阻塞执行,并等待填写的参数中的时间,如果都执行完成则返回 true,若等待超时没有完成则返回 false 或者等待中被中断则抛出异常

  1. < T > Future< T > submit(Callable< T > task);

介绍如下:
提交一个返回值的任务以供执行,并返回一个表示任务挂起结果的 Future。Future的 {@code get} 方法将在成功完成后返回任务的结果。
如果要立即阻止等待任务,可以使用
{@code result=exec.submit(aCallable.get();}
{@link Executors} 类包含一组方法,这些方法可以将其他一些常见的闭包类对象,例如,{@link java.security.PrivilegedAction} 转换为 {@link Callable} 形式,以便提交它们。
如果无法安排任务执行,则抛出异常 RejectedExecutionException
为null 时抛出空指针异常
T 为参数类型

理解:
提交一个可执行的任务,并且是 Callable 可以返回结果的,以Future 的方式获取如果要直接终止任务,直接调用 Callable 的 get。

  1. < T > Future< T > submit(Runnable task, T result);

介绍如下:
提交可运行任务以执行,并返回表示该任务的 Future。Future的 {@code get} 方法将在成功完成后返回给定的结果。

task:要提交的任务
result:返回的结果

抛出的异常与上一个 submit 一致

  1. Future<?> submit(Runnable task);

介绍如下:
提交可运行任务以执行,并返回表示该任务的Future。Future的 {@code get} 方法在成功完成后将返回{@code null}。

  1. < T > List<Future< T >> invokeAll(Collection<? extends Callable> tasks)
    throws InterruptedException;

介绍如下:
执行给定的任务,在所有任务完成时返回一个包含其状态和结果的 Future 集合。{@link Future#isDone} 为 {@code true} 对于返回列表的每个元素。
请注意,已完成的任务可能已正常终止或通过引发异常终止。如果在执行此操作时修改了给定的集合,则此方法的结果未定义。

理解:
执行给定的所有任务并返回一个包含状态和结果的 Future 集合,其中每个 Future 的 isDone 判断均为 true。已经完成的任务可能是正常执行完成,也可能是因为出现异常而终止,如果再执行此操作时改集合被修改则返回的结果将视为未定义。

异常:
如果在等待时被中断,在这种情况下,未完成的任务将被取消 抛出异常 InterruptedException

  1. < T > List<Future< T >> invokeAll(Collection<? extends Callable< T >> tasks,
    long timeout, TimeUnit unit)
    throws InterruptedException;

介绍如下:
执行给定的任务,在所有任务完成或超时过期时返回一个包含其状态和结果的未来列表,以先发生的为准。{@link Future#isDone} 对于返回列表的每个元素为{@code true}。
返回时,未完成的任务将被取消。
请注意,已完成的任务可能已正常终止或通过引发异常终止。如果在执行此操作时修改了给定的集合,则此方法的结果未定义。

理解: 与上一个方法几乎一致,但多了超时时间的规定,返回的结果为在指定时间内完成的任务,如果没有完成则任务将被取消。

  1. < T > T invokeAny(Collection<? extends Callable< T >> tasks)
    throws InterruptedException, ExecutionException;

介绍如下:
执行给定的任务,返回已成功完成的任务的结果(即,不引发异常),如果有的话。
在正常或异常返回时,未完成的任务将被取消。
如果在执行此操作时修改了给定的集合,则此方法的结果将未定义。

理解: 执行指定的任务,但是在有结果的情况下只返回正常结束的任务的结果。在正常或异常返回时,未完成的任务将被取消 。

异常:
如果在等待时被中断 抛出 InterruptedException
如果任务或任何要执行的元素任务为null 抛出 空指针
如果任务为空 抛出 IllegalArgumentException
如果没有任务成功完成 抛出 ExecutionException
如果任务不能被安排执行 抛出 RejectedExecutionException

  1. < T > T invokeAny(Collection<? extends Callable< T >> tasks,
    long timeout, TimeUnit unit)
    throws InterruptedException, ExecutionException, TimeoutException;

介绍如下:
执行给定任务,返回已成功完成的任务的结果(即,未引发异常),如果在给定超时时间结束之前执行任何操作。正常或异常返回时,未完成的任务将被取消。如果在执行此操作时修改了给定集合,则此方法的结果将未定义。

理解:
与上一个返回结果几乎一致,但多了规定时间,结果为指定时间内正常完成的任务结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值