文章目录
- ExecutorService线程池
- 1 ExecutorService API 介绍
- 1.1 api
- 1.1.1 awaitTermination 方法
- 1.1.2 invokeAll 方法
- 1.1.3 invokeAny方法
- 1.1.4 shutdown 方法
- 1.1.5 shutdownNow方法
- 1.1.6 isShutdown方法
- 1.1.7 submit方法
- 1.1.8 isTerminated方法
ExecutorService线程池
1 ExecutorService API 介绍
1.1 api
1.1.1 awaitTermination 方法
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;
描述:判断线程池是否关闭。该方法等待时间:timeout,单位unit,当返回true,表示线程池已关闭,返回false,线城市未关闭
- 参数1:最长等待时间
- 参数2:超时参数的时间单位
1.1.2 invokeAll 方法
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException;
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException;
描述:
- 执行任务列表中的所有任务,并返回与每个任务对应的Futue。
- 任务彼此之间不会相互影响,可以通过future跟踪每一个任务的执行情况,比如是否被取消,是正常完成,还是异常完成,这主要使用Future类提供的API。
- invokeAll是一个阻塞方法,会等待任务列表中的所有任务都执行完成。不管任务是正常完成,还是异常终止,Future.isDone()始终返回true。
- 通过 Future.isCanceled()可以判断任务是否在执行的过程中被取消。通过Future.get()可以获取任务的返回结果,或者是任务在执行中抛出的异常。
1.1.3 invokeAny方法
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
描述
- 执行一批任务,一旦有1个任务正常完成(执行过程中没有抛异常),返回该任务对应的Future对象,线程池会终止其他未完成的任务 。
- 如果提交的任务列表中,没有1个正常完成的任务,那么调用invokeAny会抛异常
- invokeAny()和任务的提交顺序无关,只是返回最早正常执行完成的任务
- 如果在超时之前,所有任务已经都是异常终止,那就没有必要在等下去了;如果超时之后,仍然有正在运行或等待运行的任务,那么会抛出TimeoutException。
1.1.4 shutdown 方法
描述:方法调用之后,马上拒绝接收新的任务,但是之前已经提交的任务会继续执行。
1.1.5 shutdownNow方法
List<Runnable> shutdownNow();
描述:该函数调用之后,马上拒绝接收新的任务,并且会尝试结束当前正在执行的任务,直到所有任务真正结束为止,并且会返回等待执行的任务的列表。
1.1.6 isShutdown方法
boolean isShutdown();
描述:该函数判断线程池是否已经被shutdown,如果调用过shutdown函数,则返回true,否则返回false。
1.1.7 submit方法
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
描述:
- 向线程池提交一个任务,并且返回一个Futrue对象,用于追踪任务的执行情况。
- 三个函数区别,第一个函数在任务执行完毕之后Futrue.get()将会返回任务执行的结果;第二个函数在任务执行完毕之后Future.get()将会返回给定的result结果;第三个函数在任务执行完毕之后Future.get()将会返回null。
1.1.8 isTerminated方法
boolean isTerminated();
描述:该函数判断线程池中得所有任务是否已经全部执行完毕,并且应该注意的是:如果没有调用过shutdown函数或者shutdownNow函数,该函数的返回值不可能为true。