java.lang.Object
java.util.concurrent.Executors
该包中定义的
Executor
、ExecutorService
、ScheduledExecutorService
、ThreadFactory
和Callable
类的工厂和实用方法。该类支持以下类型的方法:
- 创建并返回一个使用常用配置设置的
ExecutorService
的方法。 - 创建并返回一个使用常用配置设置的
ScheduledExecutorService
的方法。 - 创建并返回一个“包装”ExecutorService的方法,通过使实现特定方法无法访问来禁用重新配置。
- 创建并返回一个将新创建的线程设置为已知状态的
ThreadFactory
的方法。 - 创建并返回一个将其他闭包形式转换为
Callable
以便在需要Callable
的执行方法中使用的方法。
- 自从:
- 1.5
-
Method Summary
Modifier and TypeMethodDescription返回一个Callable
对象,当调用时,运行给定任务并返回null
。static <T> Callable
<T> 返回一个Callable
对象,当调用时,运行给定任务并返回给定结果。callable
(PrivilegedAction<?> action) 返回一个Callable
对象,当调用时,运行给定特权操作并返回其结果。callable
(PrivilegedExceptionAction<?> action) 返回一个Callable
对象,当调用时,运行给定特权异常操作并返回其结果。static ThreadFactory
返回一个用于创建新线程的默认线程工厂。static ExecutorService
创建一个线程池,根据需要创建新线程,但在可用时将重用先前构建的线程。static ExecutorService
newCachedThreadPool
(ThreadFactory threadFactory) 创建一个线程池,根据需要创建新线程,但在可用时将重用先前构建的线程,并使用提供的ThreadFactory在需要时创建新线程。static ExecutorService
newFixedThreadPool
(int nThreads) 创建一个线程池,重用固定数量的线程,这些线程在共享的无界队列上运行。static ExecutorService
newFixedThreadPool
(int nThreads, ThreadFactory threadFactory) 创建一个线程池,重用固定数量的线程,这些线程在共享的无界队列上运行,并使用提供的ThreadFactory在需要时创建新线程。static ScheduledExecutorService
newScheduledThreadPool
(int corePoolSize) 创建一个可以安排命令在给定延迟后运行或定期执行的线程池。static ScheduledExecutorService
newScheduledThreadPool
(int corePoolSize, ThreadFactory threadFactory) 创建一个可以安排命令在给定延迟后运行或定期执行的线程池。static ExecutorService
创建一个使用单个工作线程在无界队列上运行的Executor。static ExecutorService
newSingleThreadExecutor
(ThreadFactory threadFactory) 创建一个使用单个工作线程在无界队列上运行的Executor,并使用提供的ThreadFactory在需要时创建新线程。static ScheduledExecutorService
创建一个可以在给定延迟后安排命令运行或定期执行的单线程执行程序。static ScheduledExecutorService
newSingleThreadScheduledExecutor
(ThreadFactory threadFactory) 创建一个可以在给定延迟后安排命令运行或定期执行的单线程执行程序。static ExecutorService
newThreadPerTaskExecutor
(ThreadFactory threadFactory) 创建一个为每个任务启动新线程的Executor。static ExecutorService
创建一个为每个任务启动新虚拟线程的Executor。static ExecutorService
使用可用处理器数量作为目标并行级别创建一个工作窃取线程池。static ExecutorService
newWorkStealingPool
(int parallelism) 创建一个线程池,维护足够的线程以支持给定的并行级别,并可能使用多个队列以减少争用。static <T> Callable
<T> privilegedCallable
(Callable<T> callable) 已弃用,用于移除:此API元素可能在将来的版本中被移除。此方法仅在与Security Manager一起使用时才有用,Security Manager已被弃用并可能在将来的版本中被移除。static <T> Callable
<T> privilegedCallableUsingCurrentClassLoader
(Callable<T> callable) 已弃用,用于移除:此API元素可能在将来的版本中被移除。此方法仅在与Security Manager一起使用时才有用,Security Manager已被弃用并可能在将来的版本中被移除。static ThreadFactory
已弃用,用于移除:此API元素可能在将来的版本中被移除。此方法仅在与Security Manager一起使用时才有用,Security Manager已被弃用并可能在将来的版本中被移除。static ExecutorService
unconfigurableExecutorService
(ExecutorService executor) 返回一个对象,将所有定义的ExecutorService
方法委托给给定的执行程序,但不会委托其他可能通过转换访问的方法。static ScheduledExecutorService
返回一个对象,将所有定义的ScheduledExecutorService
方法委托给给定的执行程序,但不会委托其他可能通过转换访问的方法。
-
Method Details
-
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为null -
IllegalArgumentException
- 如果nThreads <= 0
-
newSingleThreadExecutor
创建一个使用单个工作线程在无界队列上运行的Executor。(但是请注意,如果此单个线程由于执行期间的失败而终止,如果需要执行后续任务,将会有一个新线程代替它。)任务保证按顺序执行,任何给定时间只有一个任务处于活动状态。与等效的newFixedThreadPool(1)
不同,返回的执行程序保证不可重新配置以使用其他线程。- 返回:
- 新创建的单线程Executor
-
newSingleThreadExecutor
创建一个使用单个工作线程在无界队列上运行的Executor,并使用提供的ThreadFactory在需要时创建新线程。与等效的newFixedThreadPool(1, threadFactory)
不同,返回的执行程序保证不可重新配置以使用其他线程。- 参数:
-
threadFactory
- 创建新线程时要使用的工厂 - 返回:
- 新创建的单线程Executor
- 抛出:
-
NullPointerException
- 如果threadFactory为null
-
newCachedThreadPool
创建一个线程池,根据需要创建新线程,但会在可用时重用先前构造的线程。这些池通常会提高执行许多短期异步任务的程序的性能。对execute
的调用将在可用时重用先前构造的线程。如果没有现有线程可用,将创建一个新线程并将其添加到池中。未使用的线程在六十秒后将被终止并从缓存中删除。因此,长时间空闲的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor
构造函数创建具有类似属性但具有不同细节(例如,超时参数)的池。- 返回:
- 新创建的线程池
-
newCachedThreadPool
创建一个线程池,根据需要创建新线程,但会在可用时重用先前构造的线程,并使用提供的ThreadFactory在需要时创建新线程。- 参数:
-
threadFactory
- 创建新线程时要使用的工厂 - 返回:
- 新创建的线程池
- 抛出:
-
NullPointerException
- 如果threadFactory为null
-
newThreadPerTaskExecutor
创建一个Executor,为每个任务启动一个新线程。Executor创建的线程数量是无限的。对代表提交给Executor的任务的待定结果的
cancel(true)
调用将interrupt
执行任务的线程。- 参数:
-
threadFactory
- 创建新线程时要使用的工厂 - 返回:
- 为每个任务创建一个新线程的新Executor
- 抛出:
-
NullPointerException
- 如果threadFactory为null - 自:
- 21
-
newVirtualThreadPerTaskExecutor
创建一个Executor,为每个任务启动一个新的虚拟线程。Executor创建的线程数量是无限的。此方法等效于使用创建虚拟线程的线程工厂调用
newThreadPerTaskExecutor(ThreadFactory)
。- 返回:
- 为每个任务创建一个新虚拟线程的新Executor
- 自:
- 21
-
newSingleThreadScheduledExecutor
创建一个可以安排在给定延迟后运行命令或定期执行的单线程Executor。(但是请注意,如果此单个线程在关闭之前由于执行期间的失败而终止,如果需要执行后续任务,将会有一个新线程代替它。)任务保证按顺序执行,并且任何给定时间只会有一个任务处于活动状态。与否则等效的newScheduledThreadPool(1)
不同,返回的Executor保证不可重新配置以使用其他线程。- 返回:
- 新创建的定时Executor
-
newSingleThreadScheduledExecutor
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) 创建一个可以安排在给定延迟后运行命令或定期执行的单线程Executor。(但是请注意,如果此单个线程在执行期间由于失败而终止,在关闭之前将会有一个新线程代替它以执行后续任务。)任务保证按顺序执行,并且任何给定时间只会有一个任务处于活动状态。与否则等效的newScheduledThreadPool(1, threadFactory)
不同,返回的Executor保证不可重新配置以使用其他线程。- 参数:
-
threadFactory
- 创建新线程时要使用的工厂 - 返回:
- 新创建的定时Executor
- 抛出:
-
NullPointerException
- 如果threadFactory为null
-
newScheduledThreadPool
创建一个可以安排在给定延迟后运行命令或定期执行的线程池。- 参数:
-
corePoolSize
- 保留在池中的线程数,即使它们处于空闲状态 - 返回:
- 新创建的定时线程池
- 抛出:
-
IllegalArgumentException
- 如果corePoolSize < 0
-
newScheduledThreadPool
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) 创建一个可以安排在给定延迟后运行命令或定期执行的线程池。- 参数:
-
corePoolSize
- 保留在池中的线程数,即使它们处于空闲状态 -
threadFactory
- Executor创建新线程时要使用的工厂 - 返回:
- 新创建的定时线程池
- 抛出:
-
IllegalArgumentException
- 如果corePoolSize < 0
-
NullPointerException
- 如果threadFactory为null
-
unconfigurableExecutorService
返回一个对象,将所有定义的ExecutorService
方法委托给给定的Executor,但不会委托其他可能通过转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。- 参数:
-
executor
- 底层实现 - 返回:
-
一个
ExecutorService
实例 - 抛出:
-
NullPointerException
- 如果executor为null
-
unconfigurableScheduledExecutorService
public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor) 返回一个对象,将所有定义的ScheduledExecutorService
方法委托给给定的Executor,但不会委托其他可能通过转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。- 参数:
-
executor
- 底层实现 - 返回:
-
一个
ScheduledExecutorService
实例 - 抛出:
-
NullPointerException
- 如果executor为null
-
defaultThreadFactory
返回一个用于创建新线程的默认线程工厂。此工厂在同一个ThreadGroup
中为Executor使用的所有新线程创建线程。如果存在SecurityManager
,则使用System.getSecurityManager()
的组,否则使用调用此defaultThreadFactory
方法的线程的组。每个新线程都作为非守护线程创建,优先级设置为Thread.NORM_PRIORITY
和线程组中允许的最大优先级的较小者。新线程的名称可通过Thread.getName()
访问,格式为pool-N-thread-M,其中N是此工厂的序列号,M是此工厂创建的线程的序列号。- 返回:
- 一个线程工厂
-
privilegedThreadFactory
Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.返回一个用于创建具有与当前线程相同权限的新线程的线程工厂。此工厂使用与defaultThreadFactory()
相同设置创建线程,此外还将新线程的AccessControlContext和contextClassLoader设置为与调用此privilegedThreadFactory
方法的线程相同。可以在AccessController.doPrivileged
操作中创建一个新的privilegedThreadFactory
,设置当前线程的访问控制上下文以使用在该操作中保持的选定权限设置创建线程。请注意,虽然在这些线程中运行的任务将具有与当前线程相同的访问控制和类加载器设置,但它们不一定具有相同的
ThreadLocal
或InheritableThreadLocal
值。如果需要,在ThreadPoolExecutor
子类中可以使用ThreadPoolExecutor.beforeExecute(Thread, Runnable)
在任何任务运行之前设置或重置特定的线程本地值。此外,如果需要将工作线程初始化为具有与某个其他指定线程相同的InheritableThreadLocal设置,可以创建一个自定义ThreadFactory,在其中该线程等待并处理请求以创建其他将继承其值的线程。- 返回:
- 一个线程工厂
- 抛出:
-
AccessControlException
- 如果当前访问控制上下文没有权限同时获取和设置上下文类加载器
-
callable
返回一个Callable
对象,当调用时,运行给定任务并返回给定结果。当将需要Callable
的方法应用于否则无结果的操作时,这可能很有用。- 类型参数:
-
T
- 结果的类型 - 参数:
-
task
- 要运行的任务 -
result
- 要返回的结果 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果task为null
-
callable
返回一个Callable
对象,当调用时,运行给定的任务并返回null
。- 参数:
-
task
- 要运行的任务 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果任务为null
-
callable
返回一个Callable
对象,当调用时,运行给定的特权操作并返回其结果。- 参数:
-
action
- 要运行的特权操作 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果操作为null
-
callable
返回一个Callable
对象,当调用时,运行给定的特权异常操作并返回其结果。- 参数:
-
action
- 要运行的特权异常操作 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果操作为null
-
privilegedCallable
@Deprecated(since="17", forRemoval=true) public static <T> Callable<T> privilegedCallable(Callable<T> callable) Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.返回一个Callable
对象,当调用时,将在当前访问控制上下文下执行给定的callable
。通常应在AccessController.doPrivileged
操作内调用此方法,以创建可调用对象,如果可能的话,将在该操作内保持的选定权限设置下执行;或者如果不可能,则抛出相关的AccessControlException
。- 类型参数:
-
T
- 可调用对象的结果类型 - 参数:
-
callable
- 底层任务 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果可调用对象为null
-
privilegedCallableUsingCurrentClassLoader
@Deprecated(since="17", forRemoval=true) public static <T> Callable<T> privilegedCallableUsingCurrentClassLoader(Callable<T> callable) Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.返回一个Callable
对象,当调用时,在当前访问控制上下文下执行给定的callable
,并将当前上下文类加载器作为上下文类加载器。通常应在AccessController.doPrivileged
操作内调用此方法,以创建可调用对象,如果可能的话,将在该操作内保持的选定权限设置下执行;或者如果不可能,则抛出相关的AccessControlException
。- 类型参数:
-
T
- 可调用对象的结果类型 - 参数:
-
callable
- 底层任务 - 返回:
- 一个可调用对象
- 抛出:
-
NullPointerException
- 如果可调用对象为null -
AccessControlException
- 如果当前访问控制上下文没有权限设置和获取上下文类加载器
-