返回介绍

java.util.concurrent 接口 ExecutorService

发布于 2019-10-04 09:51:43 字数 13406 浏览 935 评论 0 收藏 0

所有超级接口:
Executor
所有已知子接口:
ScheduledExecutorService
所有已知实现类:
AbstractExecutorService, ScheduledThreadPoolExecutor, ThreadPoolExecutor

public interface ExecutorService
extends Executor
 

Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。

可以关闭 ExecutorService ,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。

通过创建并返回一个可用于取消执行和/或等待完成的 Future ,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable) 。方法 invokeAnyinvokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。

Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。

用法示例

下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int) 工厂方法:

 class NetworkService {
    private final ServerSocket serverSocket;
    private final ExecutorService pool;

    public NetworkService(int port, int poolSize) throws IOException {
      serverSocket = new ServerSocket(port);
      pool = Executors.newFixedThreadPool(poolSize);
    }
 
    public void serve() {
      try {
        for (;;) {
          pool.execute(new Handler(serverSocket.accept()));
        }
      } catch (IOException ex) {
        pool.shutdown();
      }
    }
  }

  class Handler implements Runnable {
    private final Socket socket;
    Handler(Socket socket) { this.socket = socket; }
    public void run() {
      // read and service request
    }
 }
从以下版本开始:
1.5

方法摘要
booleanawaitTermination(longtimeout, TimeUnitunit)

请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。

<T> List<Future<T>>
invokeAll(Collection<Callable<T>>tasks)

执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。

<T> List<Future<T>>
invokeAll(Collection<Callable<T>>tasks, longtimeout, TimeUnitunit)

执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。

<T> T
invokeAny(Collection<Callable<T>>tasks)

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

<T> T
invokeAny(Collection<Callable<T>>tasks, longtimeout, TimeUnitunit)

执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。

booleanisShutdown()

如果此执行程序已关闭,则返回 true

booleanisTerminated()

如果关闭后所有任务都已完成,则返回 true

voidshutdown()

启动一次顺序关闭,执行以前提交的任务,但不接受新任务。

List<Runnable>shutdownNow()

试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。

<T> Future<T>
submit(Callable<T>task)

提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。

Future<?>submit(Runnabletask)

提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。

<T> Future<T>
submit(Runnabletask, Tresult)

提交一个 Runnable 任务用于执行,并返回一个 Future,该 Future 表示任务一旦完成后即返回给定的结果。

从接口 java.util.concurrent.Executor 继承的方法
execute

方法详细信息

shutdown

void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用方修改的线程(因为它没有保持 RuntimePermission("modifyThread") ),或者安全管理器的 checkAccess 方法拒绝访问。

shutdownNow

List<Runnable> shutdownNow()
试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。

无法保证能够停止正在处理的活动执行任务,但是会尽力尝试。例如,通过 Thread.interrupt() 来取消典型的实现,所以如果任何任务屏蔽或无法响应中断,则可能永远无法终止该任务。

返回:
从未开始执行的任务的列表。
抛出:
SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用方修改的线程(因为它没有保持 RuntimePermission("modifyThread") ),或者安全管理器的 checkAccess 方法拒绝访问。

isShutdown

boolean isShutdown()
如果此执行程序已关闭,则返回 true
返回:
如果此执行程序已关闭,则返回 true

isTerminated

boolean isTerminated()
如果关闭后所有任务都已完成,则返回 true 。注意,除非首先调用 shutdownshutdownNow ,否则 isTerminated 永不为 true
返回:
如果关闭后所有任务都已完成,则返回 true

awaitTermination

boolean awaitTermination(longtimeout,
                         TimeUnitunit)
                         throws InterruptedException
请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。
参数:
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
如果此执行程序终止,则返回 true ;如果终止前超时期满,则返回 false
抛出:
InterruptedException - 如果等待时发生中断

submit

<T> Future<T> submit(Callable<T>task)
提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。

如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable).get(); 形式的构造。

注: Executors 类包括了一组方法,可以转换某些其他常见的类似于闭包的对象,例如,将 PrivilegedAction 转换为 Callable 形式,这样就可以提交它们了。

参数:
task - 要提交的任务
返回:
表示任务等待完成的 Future
抛出:
RejectedExecutionException - 如果任务无法安排执行
NullPointerException - 如果 task 为 null

submit

<T> Future<T> submit(Runnabletask,
                     Tresult)
提交一个 Runnable 任务用于执行,并返回一个 Future,该 Future 表示任务一旦完成后即返回给定的结果。
参数:
task - 要提交的任务
result - 返回的结果
返回:
表示任务等待完成的 Future,并且其 get() 方法在完成后将返回给定的结果。
抛出:
RejectedExecutionException - 如果任务无法安排执行
NullPointerException - 如果 task 为 null

submit

Future<?> submit(Runnabletask)
提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
参数:
task - 要提交的任务。
返回:
表示任务等待完成的 Future,并且其 get() 方法在完成后将返回 null
抛出:
RejectedExecutionException - 如果任务无法安排执行
NullPointerException - 如果 task 为 null

invokeAll

<T> List<Future<T>> invokeAll(Collection<Callable<T>>tasks)
                          throws InterruptedException
执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。返回列表的所有元素的 Future.isDone()true 。注意,可以正常地或通过抛出异常来终止已完成 任务。如果正在进行此操作时修改了给定的集合,则此方法的结果是不明确的。
参数:
tasks - 任务集合
返回:
表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同,每个任务都已完成。
抛出:
InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务。
NullPointerException - 如果任务或其任意元素为 null
RejectedExecutionException - 如果所有任务都无法安排执行

invokeAll

<T> List<Future<T>> invokeAll(Collection<Callable<T>>tasks,
                              longtimeout,
                              TimeUnitunit)
                          throws InterruptedException
执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。返回列表的所有元素的 Future.isDone()true 。一旦返回后,即取消尚未完成的任务。注意,可以正常地或通过抛出异常来终止已完成 任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。
参数:
tasks - 任务集合
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同。如果操作未超时,则已完成所有任务。如果确实超时了,则某些任务尚未完成。
抛出:
InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务
NullPointerException - 如果任务或其任意元素或 unit 为 null
RejectedExecutionException - 如果所有任务都无法安排执行

invokeAny

<T> T invokeAny(Collection<Callable<T>>tasks)
            throws InterruptedException,
                   ExecutionException
执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。
参数:
tasks - 任务集合
返回:
某个任务返回的结果
抛出:
InterruptedException - 如果等待时发生中断
NullPointerException - 如果任务或其任意元素为 null
IllegalArgumentException - 如果任务为空
ExecutionException - 如果没有任务成功完成
RejectedExecutionException - 如果任务无法安排执行

invokeAny

<T> T invokeAny(Collection<Callable<T>>tasks,
                longtimeout,
                TimeUnitunit)
            throws InterruptedException,
                   ExecutionException,
                   TimeoutException
执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的集合,则此方法的结果是不明确的。
参数:
tasks - 任务集合
timeout - 最长等待时间
unit - timeout 参数的时间单位
返回:
某个任务返回的结果
抛出:
InterruptedException - 如果等待时发生中断
NullPointerException - 如果任务或其任意元素或 unit 为 null
TimeoutException - 如果在所有任务成功完成之前给定的超时期满
ExecutionException - 如果没有任务成功完成
RejectedExecutionException - 如果任务无法安排执行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文