Java Executor Framework

Executor Framework

Executor framework 以Executor接口为核心, 有ExecutorService 和 ScheduledExecutorService 2 个子接口, 提供了线程创建, 销毁的快捷方式, 并且线程可以做到复用.

Runnable VS Callable

  1. Callable 提供的call() 方法, 可以异步返回结果, 可以throw checked Exception;
  2. ExecutorService 接口可以通过 submit, invokeAny, invokeAll 去执行Callable 接口, 返回Future.

ExecutorService

shutdown() 和 shutdownNow() 的区别在于是否执行pending的task.
如果当前线程要等待ExecutorService的线程都执行完, 必须调用shutdown / shutdownNow, 然后调用
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException.
invokeAny() 方法返回最快的一个Task 结果, 如果第一个有Exception, 一次找后面比较快的, 如果都有异常, 则返回异常.

Future

ExecutorService 的 submit(), invokeAll(), invokeAny() 都返回Future对象, 它能track Callable 执行的状态, 能cancel Callable.

FutureTask

FutureTask 实现了Runnable, Future, RunnableFuture 接口.
因为实现了Runnable接口, 所以可以被Thread, ExecutorService执行.
因为实现了Future 接口, 所以可以track status, 可以被cancel;
构造函数可以封装 Runnable 和 Callable.

一张图总结一下:
box-598143524220884.jpg

标签: none

添加新评论