JUC并发包

Executor家族-Executor,ExecutorServ

2020-12-22  本文已影响0人  于情于你
image.png

Executor:Executor家族的首长。父接口,其中只有一个方法

// 在将来的某个时间执行给定的命令
void execute(Runnable command);

ExecutorService:Executor的扩展接口,包含的所有方法如下:


image.png
// 启动有序关闭,在该关闭中执行先前提交的任务,但不接受任何新任务。如果已经关闭,则调用不会产生任何其他影响。
void shutdown();

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

// 如果该执行程序已关闭,则返回true
boolean isShutdown();

// 如果所有任务在关闭后都已完成,则返回true
// 请注意,除非首先调用shutdown或code shutdownNow,否则isTerminated永远不会是true
boolean isTerminated();

// 当等待超过设定时间时,会监测 ExecutorService是否已经关闭,若关闭则返回true,否则返回false
boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

// 提交一个callable任务,并返回一个一个代表任务执行结果的Future
<T> Future<T> submit(Callable<T> task);

 //当task执行成功的时候future.get()返回result  
<T> Future<T> submit(Runnable task, T result);  

 //当task执行成功的时候future.get()返回null  
Future<?> submit(Runnable task);  

// 批量执行任务,并返回执行结果的Future的List。
// 如果在进行此操作时修改了给定的任务集合,则此方法的结果不确定。
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)  throws InterruptedException;

// 批量执行任务,并返回执行结果的Future的List。指定超时时间
// 如果操作没有超时,每个任务都会完成。 如果超时,其中一些任务将不会完成。也就拿不到任务的执行结果
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                  long timeout, TimeUnit unit) throws InterruptedException;


// 批量执行任务,并返回一个执行成功的任何一个执行结果(就是没有抛异常的)
// 在正常或异常返回时,尚未完成的任务将被取消。
<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;
上一篇下一篇

猜你喜欢

热点阅读