ExecutorService线程池

本文详细介绍了ExecutorService线程池的各种API方法及其应用场景,包括awaitTermination、invokeAll、invokeAny等方法的使用技巧,并阐述了这些方法如何帮助开发者有效管理和控制线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExecutorService线程池

1 ExecutorService API 介绍

1.1 api

在这里插入图片描述

1.1.1 awaitTermination 方法
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

描述:判断线程池是否关闭。该方法等待时间:timeout,单位unit,当返回true,表示线程池已关闭,返回false,线城市未关闭

  1. 参数1:最长等待时间
  2. 参数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;

描述:

  1. 执行任务列表中的所有任务,并返回与每个任务对应的Futue。
  2. 任务彼此之间不会相互影响,可以通过future跟踪每一个任务的执行情况,比如是否被取消,是正常完成,还是异常完成,这主要使用Future类提供的API。
  3. invokeAll是一个阻塞方法,会等待任务列表中的所有任务都执行完成。不管任务是正常完成,还是异常终止,Future.isDone()始终返回true。
  4. 通过 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. 执行一批任务,一旦有1个任务正常完成(执行过程中没有抛异常),返回该任务对应的Future对象,线程池会终止其他未完成的任务 。
  2. 如果提交的任务列表中,没有1个正常完成的任务,那么调用invokeAny会抛异常
  3. invokeAny()和任务的提交顺序无关,只是返回最早正常执行完成的任务
  4. 如果在超时之前,所有任务已经都是异常终止,那就没有必要在等下去了;如果超时之后,仍然有正在运行或等待运行的任务,那么会抛出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);

描述:

  1. 向线程池提交一个任务,并且返回一个Futrue对象,用于追踪任务的执行情况。
  2. 三个函数区别,第一个函数在任务执行完毕之后Futrue.get()将会返回任务执行的结果;第二个函数在任务执行完毕之后Future.get()将会返回给定的result结果;第三个函数在任务执行完毕之后Future.get()将会返回null。
1.1.8 isTerminated方法
boolean isTerminated();

描述:该函数判断线程池中得所有任务是否已经全部执行完毕,并且应该注意的是:如果没有调用过shutdown函数或者shutdownNow函数,该函数的返回值不可能为true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值