java.lang.Object
java.util.concurrent.Executors
此包中定义的
Executor 、ExecutorService 、ScheduledExecutorService 、ThreadFactory 和 Callable 类的工厂方法和实用方法。该类支持以下几种方法:
- 使用常用配置设置创建和返回
ExecutorService设置的方法。 - 使用常用配置设置创建和返回
ScheduledExecutorService设置的方法。 - 创建并返回“包装的”ExecutorService 的方法,通过使特定于实现的方法不可访问来禁用重新配置。
- 创建并返回
ThreadFactory的方法,它将新创建的线程设置为已知状态。 - 从其他类似闭包的形式创建和返回
Callable的方法,因此它们可以用于需要Callable的执行方法。
- 自从:
- 1.5
-
方法总结
修饰符和类型方法描述返回一个Callable对象,该对象在被调用时运行给定任务并返回null。static <T> Callable<T>返回一个Callable对象,该对象在调用时运行给定任务并返回给定结果。callable(PrivilegedAction<?> action) 返回一个Callable对象,该对象在被调用时运行给定的特权操作并返回其结果。callable(PrivilegedExceptionAction<?> action) 返回一个Callable对象,该对象在被调用时运行给定的特权异常操作并返回其结果。static ThreadFactory返回用于创建新线程的默认线程工厂。static ExecutorService创建一个线程池,该线程池根据需要创建新线程,但会在可用时重用以前构造的线程。static ExecutorServicenewCachedThreadPool(ThreadFactory threadFactory) 创建一个线程池,该线程池根据需要创建新线程,但会在可用时重用以前构造的线程,并在需要时使用提供的 ThreadFactory 创建新线程。static ExecutorServicenewFixedThreadPool(int nThreads) 创建一个线程池,该线程池重用固定数量的线程,这些线程在共享的无界队列中运行。static ExecutorServicenewFixedThreadPool(int nThreads, ThreadFactory threadFactory) 创建一个线程池,该线程池重用固定数量的线程,这些线程在共享无界队列中运行,并在需要时使用提供的 ThreadFactory 创建新线程。static ScheduledExecutorServicenewScheduledThreadPool(int corePoolSize) 创建一个线程池,可以安排命令在给定的延迟后运行,或定期执行。static ScheduledExecutorServicenewScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) 创建一个线程池,可以安排命令在给定的延迟后运行,或定期执行。static ExecutorService创建一个 Executor,它使用单个工作线程在无界队列中运行。static ExecutorServicenewSingleThreadExecutor(ThreadFactory threadFactory) 创建一个 Executor,它使用单个工作线程在无界队列中运行,并在需要时使用提供的 ThreadFactory 创建新线程。static ScheduledExecutorService创建一个单线程执行器,它可以安排命令在给定延迟后运行,或定期执行。static ScheduledExecutorServicenewSingleThreadScheduledExecutor(ThreadFactory threadFactory) 创建一个单线程执行器,它可以安排命令在给定延迟后运行,或定期执行。static ExecutorServicenewThreadPerTaskExecutor(ThreadFactory threadFactory) 预览。创建一个执行器,为每个任务启动一个新线程。static ExecutorService预览。创建一个执行器,为每个任务启动一个新的虚拟线程。static ExecutorService使用 可用处理器 的数量作为其目标并行度级别创建工作窃取线程池。static ExecutorServicenewWorkStealingPool(int parallelism) 创建一个线程池,该线程池维护足够的线程以支持给定的并行度级别,并且可以使用多个队列来减少争用。static <T> Callable<T>privilegedCallable(Callable<T> callable) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。static <T> Callable<T>privilegedCallableUsingCurrentClassLoader(Callable<T> callable) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。static ThreadFactory已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。static ExecutorServiceunconfigurableExecutorService(ExecutorService executor) 返回一个对象,该对象将所有定义的ExecutorService方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。static ScheduledExecutorService返回一个对象,该对象将所有定义的ScheduledExecutorService方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。
-
方法详情
-
newFixedThreadPool
创建一个线程池,该线程池重用固定数量的线程,这些线程在共享的无界队列中运行。在任何时候,最多nThreads个线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了额外的任务,它们将在队列中等待,直到有线程可用。如果任何线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,将有一个新线程取代它。池中的线程将一直存在,直到它显式为shutdown。- 参数:
nThreads- 池中的线程数- 返回:
- 新创建的线程池
- 抛出:
IllegalArgumentException- 如果nThreads <= 0
-
newWorkStealingPool
创建一个线程池,该线程池维护足够的线程以支持给定的并行度级别,并且可以使用多个队列来减少争用。并行度级别对应于积极参与或可参与任务处理的最大线程数。实际线程数可能会动态增长和收缩。工作窃取池不保证提交任务的执行顺序。- 参数:
parallelism- 目标并行度- 返回:
- 新创建的线程池
- 抛出:
IllegalArgumentException- 如果parallelism <= 0- 自从:
- 1.8
-
newWorkStealingPool
使用 可用处理器 的数量作为其目标并行度级别创建工作窃取线程池。- 返回:
- 新创建的线程池
- 自从:
- 1.8
- 参见:
-
newFixedThreadPool
创建一个线程池,该线程池重用固定数量的线程,这些线程在共享无界队列中运行,并在需要时使用提供的 ThreadFactory 创建新线程。在任何时候,最多nThreads个线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了额外的任务,它们将在队列中等待,直到有线程可用。如果任何线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,将有一个新线程取代它。池中的线程将一直存在,直到它显式为shutdown。- 参数:
nThreads- 池中的线程数threadFactory- 创建新线程时使用的工厂- 返回:
- 新创建的线程池
- 抛出:
NullPointerException- 如果 threadFactory 为空IllegalArgumentException- 如果nThreads <= 0
-
newSingleThreadExecutor
创建一个 Executor,它使用单个工作线程在无界队列中运行。 (但是请注意,如果此单个线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,一个新线程将取代它。)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的newFixedThreadPool(1)不同,返回的执行程序保证不能重新配置以使用其他线程。- 返回:
- 新创建的单线程执行器
-
newSingleThreadExecutor
创建一个 Executor,它使用单个工作线程在无界队列中运行,并在需要时使用提供的 ThreadFactory 创建新线程。与其他等效的newFixedThreadPool(1, threadFactory)不同,返回的执行程序保证不能重新配置以使用其他线程。- 参数:
threadFactory- 创建新线程时使用的工厂- 返回:
- 新创建的单线程执行器
- 抛出:
NullPointerException- 如果 threadFactory 为空
-
newCachedThreadPool
创建一个线程池,该线程池根据需要创建新线程,但会在可用时重用以前构造的线程。这些池通常会提高执行许多短期异步任务的程序的性能。调用execute将重用以前构造的线程(如果可用)。如果没有可用的现有线程,将创建一个新线程并将其添加到池中。 60 秒内未使用的线程将被终止并从缓存中删除。因此,保持空闲时间足够长的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有相似属性但不同细节(例如,超时参数)的池。- 返回:
- 新创建的线程池
-
newCachedThreadPool
创建一个线程池,该线程池根据需要创建新线程,但会在可用时重用以前构造的线程,并在需要时使用提供的 ThreadFactory 创建新线程。- 参数:
threadFactory- 创建新线程时使用的工厂- 返回:
- 新创建的线程池
- 抛出:
NullPointerException- 如果 threadFactory 为空
-
newThreadPerTaskExecutor
newThreadPerTaskExecutor是 Java 平台的预览 API。程序只能在启用预览功能时使用newThreadPerTaskExecutor。预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。创建一个执行器,为每个任务启动一个新线程。 Executor 创建的线程数是无限的。在表示提交给执行器的任务的未决结果的
Future上调用cancel(true)将interrupt线程执行该任务。- 参数:
threadFactory- 创建新线程时使用的工厂- 返回:
- 为每个任务创建新线程的新执行器
- 抛出:
NullPointerException- 如果 threadFactory 为空- 自从:
- 19
-
newVirtualThreadPerTaskExecutor
newVirtualThreadPerTaskExecutor是 Java 平台的预览 API。程序只能在启用预览功能时使用newVirtualThreadPerTaskExecutor。预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。创建一个执行器,为每个任务启动一个新的虚拟线程。 Executor 创建的线程数是无限的。这个方法相当于调用
newThreadPerTaskExecutor(ThreadFactory)PREVIEW 使用创建虚拟线程的线程工厂。- 返回:
- 一个新的执行器,为每个任务创建一个新的虚拟线程
- 抛出:
UnsupportedOperationException- 如果未启用预览功能- 自从:
- 19
-
newSingleThreadScheduledExecutor
创建一个单线程执行器,它可以安排命令在给定延迟后运行,或定期执行。 (但是请注意,如果此单个线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,一个新线程将取代它。)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的newScheduledThreadPool(1)不同,返回的执行程序保证不能重新配置以使用其他线程。- 返回:
- 新创建的调度执行器
-
newSingleThreadScheduledExecutor
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) 创建一个单线程执行器,它可以安排命令在给定延迟后运行,或定期执行。 (但是请注意,如果此单个线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,一个新线程将取代它。)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的newScheduledThreadPool(1, threadFactory)不同,返回的执行程序保证不能重新配置以使用其他线程。- 参数:
threadFactory- 创建新线程时使用的工厂- 返回:
- 新创建的调度执行器
- 抛出:
NullPointerException- 如果 threadFactory 为空
-
newScheduledThreadPool
创建一个线程池,可以安排命令在给定的延迟后运行,或定期执行。- 参数:
corePoolSize- 保留在池中的线程数,即使它们处于空闲状态- 返回:
- 新创建的调度线程池
- 抛出:
IllegalArgumentException- 如果corePoolSize < 0
-
newScheduledThreadPool
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) 创建一个线程池,可以安排命令在给定的延迟后运行,或定期执行。- 参数:
corePoolSize- 保留在池中的线程数,即使它们处于空闲状态threadFactory- 执行程序创建新线程时使用的工厂- 返回:
- 新创建的调度线程池
- 抛出:
IllegalArgumentException- 如果corePoolSize < 0NullPointerException- 如果 threadFactory 为空
-
unconfigurableExecutorService
返回一个对象,该对象将所有定义的ExecutorService方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。- 参数:
executor- 底层实现- 返回:
-
一个
ExecutorService实例 - 抛出:
NullPointerException- 如果执行者为空
-
unconfigurableScheduledExecutorService
public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor) 返回一个对象,该对象将所有定义的ScheduledExecutorService方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。- 参数:
executor- 底层实现- 返回:
-
一个
ScheduledExecutorService实例 - 抛出:
NullPointerException- 如果执行者为空
-
defaultThreadFactory
返回用于创建新线程的默认线程工厂。该工厂在同一个ThreadGroup中创建 Executor 使用的所有新线程。如果有SecurityManager,它使用System.getSecurityManager()组,否则使用调用此defaultThreadFactory方法的线程组。每个新线程都被创建为非守护线程,优先级设置为Thread.NORM_PRIORITY和线程组中允许的最大优先级中的较小者。新线程的名称可通过Thread.getName()或 pool-N-thread-M 访问,其中 N 是该工厂的序列号,M 是该工厂创建的线程的序列号。- 返回:
- 线程工厂
-
privilegedThreadFactory
已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。返回一个线程工厂,用于创建与当前线程具有相同权限的新线程。该工厂使用与defaultThreadFactory()相同的设置创建线程,另外将新线程的 AccessControlContext 和 contextClassLoader 设置为与调用此privilegedThreadFactory方法的线程相同。可以在AccessController.doPrivileged操作中创建一个新的privilegedThreadFactory来设置当前线程的访问控制上下文,以创建具有在该操作中保留的选定权限设置的线程。请注意,虽然在此类线程中运行的任务将具有与当前线程相同的访问控制和类加载器设置,但它们不需要具有相同的
ThreadLocal或InheritableThreadLocal值。如有必要,可以在使用ThreadPoolExecutor.beforeExecute(Thread, Runnable)在ThreadPoolExecutor子类中运行任何任务之前设置或重置线程局部变量的特定值。此外,如果有必要将工作线程初始化为与某些其他指定线程具有相同的 InheritableThreadLocal 设置,您可以创建一个自定义 ThreadFactory,该线程在其中等待和服务请求创建将继承其值的其他线程。- 返回:
- 线程工厂
- 抛出:
AccessControlException- 如果当前访问控制上下文没有获取和设置上下文类加载器的权限
-
callable
返回一个Callable对象,该对象在调用时运行给定任务并返回给定结果。在将需要Callable的方法应用于否则无结果的操作时,这可能很有用。- 类型参数:
T- 结果的类型- 参数:
task- 要运行的任务result- 要返回的结果- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果任务为空
-
callable
返回一个Callable对象,该对象在被调用时运行给定任务并返回null。- 参数:
task- 要运行的任务- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果任务为空
-
callable
返回一个Callable对象,该对象在被调用时运行给定的特权操作并返回其结果。- 参数:
action- 要运行的特权操作- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果动作为空
-
callable
返回一个Callable对象,该对象在被调用时运行给定的特权异常操作并返回其结果。- 参数:
action- 要运行的特权异常操作- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果动作为空
-
privilegedCallable
@Deprecated (since ="17", forRemoval =true) public static <T> Callable <T> privilegedCallable(Callable <T> callable) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。返回一个Callable对象,该对象将在调用时在当前访问控制上下文下执行给定的callable。此方法通常应在AccessController.doPrivileged操作中调用,以创建可调用对象,如果可能,这些可调用对象将在该操作中持有的选定权限设置下执行;或者如果不可能,抛出一个关联的AccessControlException。- 类型参数:
T- 可调用结果的类型- 参数:
callable- 底层任务- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果可调用 null
-
privilegedCallableUsingCurrentClassLoader
@Deprecated (since ="17", forRemoval =true) public static <T> Callable <T> privilegedCallableUsingCurrentClassLoader(Callable <T> callable) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。返回一个Callable对象,该对象将在调用时在当前访问控制上下文下执行给定的callable,并将当前上下文类加载器作为上下文类加载器。此方法通常应在AccessController.doPrivileged操作中调用,以创建可调用对象,如果可能,这些可调用对象将在该操作中持有的选定权限设置下执行;或者如果不可能,抛出一个关联的AccessControlException。- 类型参数:
T- 可调用结果的类型- 参数:
callable- 底层任务- 返回:
- 可调用对象
- 抛出:
NullPointerException- 如果可调用 nullAccessControlException- 如果当前访问控制上下文没有设置和获取上下文类加载器的权限
-