- java.lang.Object
-
- java.util.concurrent.Executors
-
public class Executorsextends Object
工厂和工具方法Executor
,ExecutorService
,ScheduledExecutorService
,ThreadFactory
,和Callable
此包中定义的类。 该类支持以下几种方法:- 使用常用配置设置创建和返回
ExecutorService
设置的方法。 - 创建和返回
ScheduledExecutorService
设置的方法,使用常用的配置设置。 - 创建并返回“包装”ExecutorService的方法,通过使特定于实现的方法不可访问来禁用重新配置。
- 创建并返回将新创建的线程设置为已知状态的
ThreadFactory
的方法。 - 创建并返回一个方法
Callable
出来的其他闭包形式,这样他们就可以在需要的执行方法使用Callable
。
- 从以下版本开始:
- 1.5
- 使用常用配置设置创建和返回
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static Callable<Object>
callable(Runnable task)
返回一个Callable
对象,该对象在调用时运行给定任务并返回null
。static <T> Callable<T>
callable(Runnable task, T result)
返回一个Callable
对象,该对象在调用时运行给定任务并返回给定结果。static Callable<Object>
callable(PrivilegedAction<?> action)
返回一个Callable
对象,该对象在调用时运行给定的特权操作并返回其结果。static Callable<Object>
callable(PrivilegedExceptionAction<?> action)
返回一个Callable
对象,该对象在调用时运行给定的特权异常操作并返回其结果。static ThreadFactory
defaultThreadFactory()
返回用于创建新线程的默认线程工厂。static ExecutorService
newCachedThreadPool()
创建一个根据需要创建新线程的线程池,但在它们可用时将重用以前构造的线程。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
newSingleThreadExecutor()
创建一个Executor,它使用一个在无界队列中运行的工作线程。static ExecutorService
newSingleThreadExecutor(ThreadFactory threadFactory)
创建一个Executor,它使用一个在无界队列中运行的工作线程,并在需要时使用提供的ThreadFactory创建一个新线程。static ScheduledExecutorService
newSingleThreadScheduledExecutor()
创建一个单线程执行程序,可以调度命令在给定的延迟后运行,或定期执行。static ScheduledExecutorService
newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
创建一个单线程执行程序,可以调度命令在给定的延迟后运行,或定期执行。static ExecutorService
newWorkStealingPool()
使用 available processors的数量作为其目标并行度级别创建工作窃取线程池。static ExecutorService
newWorkStealingPool(int parallelism)
创建一个线程池,该线程池维护足够的线程以支持给定的并行度级别,并可以使用多个队列来减少争用。static <T> Callable<T>
privilegedCallable(Callable<T> callable)
返回一个Callable
对象,在调用时,将在当前访问控制上下文下执行给定的callable
。static <T> Callable<T>
privilegedCallableUsingCurrentClassLoader(Callable<T> callable)
返回一个Callable
对象,当调用该对象时,将在当前访问控制上下文下执行给定的callable
,并将当前上下文类加载器作为上下文类加载器。static ThreadFactory
privilegedThreadFactory()
返回一个线程工厂,用于创建与当前线程具有相同权限的新线程。static ExecutorService
unconfigurableExecutorService(ExecutorService executor)
返回一个对象,该对象将所有已定义的ExecutorService
方法委派给给定的执行程序,但不能使用强制转换可以访问的任何其他方法。static ScheduledExecutorService
unconfigurableScheduledExecutorService(ScheduledExecutorService executor)
返回一个对象,该对象将所有已定义的ScheduledExecutorService
方法委托给给定的执行程序,但不能使用强制转换可以访问的任何其他方法。
-
-
-
方法详细信息
-
newFixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads)
创建一个线程池,该池重用在共享的无界队列中运行的固定数量的线程。 在任何时候,最多nThreads
线程都将处于活动状态。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。 如果任何线程由于在关闭之前执行期间的故障而终止,则如果需要执行后续任务,则新线程将取代它。 池中的线程将一直存在,直到它明确为shutdown
。- 参数
-
nThreads
- 池中的线程数 - 结果
- 新创建的线程池
- 异常
-
IllegalArgumentException
- 如果nThreads <= 0
-
newWorkStealingPool
public static ExecutorService newWorkStealingPool(int parallelism)
创建一个线程池,该线程池维护足够的线程以支持给定的并行度级别,并可以使用多个队列来减少争用。 并行度级别对应于主动参与或可用于任务处理的最大线程数。 实际线程数可能会动态增长和缩小。 工作窃取池不保证提交任务的执行顺序。- 参数
-
parallelism
- 目标并行度级别 - 结果
- 新创建的线程池
- 异常
-
IllegalArgumentException
- 如果parallelism <= 0
- 从以下版本开始:
- 1.8
-
newWorkStealingPool
public static ExecutorService newWorkStealingPool()
使用 available processors的数量作为其目标并行度级别创建工作窃取线程池。- 结果
- 新创建的线程池
- 从以下版本开始:
- 1.8
- 另请参见:
-
newWorkStealingPool(int)
-
newFixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)
创建一个线程池,该线程池重用在共享的无界队列中运行的固定数量的线程,使用提供的ThreadFactory在需要时创建新线程。 在任何时候,最多nThreads
线程都将处于活动状态。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。 如果任何线程由于在关闭之前执行期间的故障而终止,则如果需要执行后续任务,则新线程将取代它。 池中的线程将一直存在,直到它明确为shutdown
。- 参数
-
nThreads
- 池中的线程数 -
threadFactory
- 创建新线程时使用的工厂 - 结果
- 新创建的线程池
- 异常
-
NullPointerException
- 如果threadFactory为null -
IllegalArgumentException
- 如果nThreads <= 0
-
newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor()
创建一个Executor,它使用一个在无界队列中运行的工作线程。 (但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。)保证任务顺序执行,并且不会有多个任务处于活动状态在任何给定的时间。 与其他等效的newFixedThreadPool(1)
不同,保证返回的执行程序不可重新配置以使用其他线程。- 结果
- 新创建的单线程Executor
-
newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory)
创建一个Executor,它使用一个在无界队列中运行的工作线程,并在需要时使用提供的ThreadFactory创建一个新线程。 与其他等效的newFixedThreadPool(1, threadFactory)
不同,保证返回的执行程序不可重新配置以使用其他线程。- 参数
-
threadFactory
- 创建新线程时使用的工厂 - 结果
- 新创建的单线程Executor
- 异常
-
NullPointerException
- 如果threadFactory为null
-
newCachedThreadPool
public static ExecutorService newCachedThreadPool()
创建一个根据需要创建新线程的线程池,但在它们可用时将重用以前构造的线程。 这些池通常会提高执行许多短期异步任务的程序的性能。 如果可用,调用execute
将重用先前构造的线程。 如果没有可用的现有线程,则将创建一个新线程并将其添加到池中。 未使用60秒的线程将终止并从缓存中删除。 因此,长时间闲置的池不会消耗任何资源。 请注意,可以使用ThreadPoolExecutor
构造函数创建具有相似属性但不同详细信息(例如,超时参数)的池 。- 结果
- 新创建的线程池
-
newCachedThreadPool
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory)
创建一个根据需要创建新线程的线程池,但在它们可用时将重用以前构造的线程,并在需要时使用提供的ThreadFactory创建新线程。- 参数
-
threadFactory
- 创建新线程时使用的工厂 - 结果
- 新创建的线程池
- 异常
-
NullPointerException
- 如果threadFactory为null
-
newSingleThreadScheduledExecutor
public static ScheduledExecutorService newSingleThreadScheduledExecutor()
创建一个单线程执行程序,可以调度命令在给定的延迟后运行,或定期执行。 (但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。)保证任务顺序执行,并且不会有多个任务处于活动状态在任何给定的时间。 与其他等效的newScheduledThreadPool(1)
不同,保证返回的执行程序不可重新配置以使用其他线程。- 结果
- 新创建的预定执行人
-
newSingleThreadScheduledExecutor
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
创建一个单线程执行程序,可以调度命令在给定的延迟后运行,或定期执行。 (但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。)保证任务顺序执行,并且不会有多个任务处于活动状态在任何给定的时间。 与其他等效的newScheduledThreadPool(1, threadFactory)
不同,保证返回的执行程序不可重新配置以使用其他线程。- 参数
-
threadFactory
- 创建新线程时使用的工厂 - 结果
- 新创建的预定执行人
- 异常
-
NullPointerException
- 如果threadFactory为null
-
newScheduledThreadPool
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
创建一个线程池,可以调度命令在给定的延迟后运行,或者定期执行。- 参数
-
corePoolSize
- 池中保留的线程数,即使它们处于空闲状态 - 结果
- 新创建的预定线程池
- 异常
-
IllegalArgumentException
- 如果corePoolSize < 0
-
newScheduledThreadPool
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)
创建一个线程池,可以调度命令在给定的延迟后运行,或者定期执行。- 参数
-
corePoolSize
- 池中保留的线程数,即使它们处于空闲状态 -
threadFactory
- 执行程序创建新线程时使用的工厂 - 结果
- 新创建的预定线程池
- 异常
-
IllegalArgumentException
- 如果corePoolSize < 0
-
NullPointerException
- 如果threadFactory为null
-
unconfigurableExecutorService
public static ExecutorService unconfigurableExecutorService(ExecutorService executor)
返回一个对象,该对象将所有已定义的ExecutorService
方法委托给给定的执行程序,但不能使用强制转换可以访问的任何其他方法。 这提供了一种安全地“冻结”配置并且不允许调整给定具体实现的方法。- 参数
-
executor
- 底层实现 - 结果
- 一个
ExecutorService
实例 - 异常
-
NullPointerException
- 如果executor为null
-
unconfigurableScheduledExecutorService
public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor)
返回一个对象,该对象将所有已定义的ScheduledExecutorService
方法委托给给定的执行程序,但不能使用强制转换可以访问的任何其他方法。 这提供了一种安全地“冻结”配置并且不允许调整给定具体实现的方法。- 参数
-
executor
- 底层实现 - 结果
- 一个
ScheduledExecutorService
实例 - 异常
-
NullPointerException
- 如果执行者为null
-
defaultThreadFactory
public static ThreadFactory defaultThreadFactory()
返回用于创建新线程的默认线程工厂。 此工厂在同一个ThreadGroup
中创建Executor使用的所有新线程。 如果有SecurityManager
,则使用组System.getSecurityManager()
,否则调用此defaultThreadFactory
方法的线程组。 每个新线程都创建为非守护程序线程,其优先级设置为较小的Thread.NORM_PRIORITY
和线程组中允许的最大优先级。 新线程的名称可通过pool-N-thread-M的Thread.getName()
访问,其中N是此工厂的序列号, M是此工厂创建的线程的序列号。- 结果
- 一个线程工厂
-
privilegedThreadFactory
public static ThreadFactory privilegedThreadFactory()
返回一个线程工厂,用于创建与当前线程具有相同权限的新线程。 此工厂使用与defaultThreadFactory()
相同的设置创建线程,另外将新线程的AccessControlContext和contextClassLoader设置为与调用此privilegedThreadFactory
方法的线程相同。 可以在AccessController.doPrivileged
操作中创建新的privilegedThreadFactory
设置当前线程的访问控制上下文,以创建具有该操作中所选权限设置的线程。请注意,虽然在此类线程中运行的任务将具有与当前线程相同的访问控制和类加载器设置,但它们不需要具有相同的
ThreadLocal
或InheritableThreadLocal
值。 如有必要,可以使用ThreadPoolExecutor.beforeExecute(Thread, Runnable)
在ThreadPoolExecutor
子类中运行任何任务之前设置或重置线程本地的特定值。 此外,如果需要初始化工作线程以使其具有与其他指定线程相同的InheritableThreadLocal设置,则可以创建该线程等待的自定义ThreadFactory,并创建服务请求以创建将继承其值的其他线程。- 结果
- 一个线程工厂
- 异常
-
AccessControlException
- 如果当前访问控制上下文没有获取和设置上下文类加载器的权限
-
callable
public static <T> Callable<T> callable(Runnable task, T result)
返回一个Callable
对象,该对象在调用时运行给定任务并返回给定结果。 当将需要Callable
方法应用于否则无结果的操作时,这可能很有用。- 参数类型
-
T
- 结果的类型 - 参数
-
task
- 要运行的任务 -
result
- 要返回的结果 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果任务为空
-
callable
public static Callable<Object> callable(Runnable task)
返回一个Callable
对象,该对象在调用时运行给定任务并返回null
。- 参数
-
task
- 要运行的任务 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果任务为空
-
callable
public static Callable<Object> callable(PrivilegedAction<?> action)
返回一个Callable
对象,该对象在调用时运行给定的特权操作并返回其结果。- 参数
-
action
- 要运行的特权操作 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果操作为null
-
callable
public static Callable<Object> callable(PrivilegedExceptionAction<?> action)
返回一个Callable
对象,该对象在调用时运行给定的特权异常操作并返回其结果。- 参数
-
action
- 要运行的特权异常操作 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果操作为null
-
privilegedCallable
public static <T> Callable<T> privilegedCallable(Callable<T> callable)
返回一个Callable
对象,在调用时,将在当前访问控制上下文下执行给定的callable
。 通常应在AccessController.doPrivileged
操作中调用此方法以创建可调用的密码 ,如果可能,将在该操作中保留的所选权限设置下执行; 或者如果不可能,抛出一个相关的AccessControlException
。- 参数类型
-
T
- 可调用结果的类型 - 参数
-
callable
- 基础任务 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果可调用null
-
privilegedCallableUsingCurrentClassLoader
public static <T> Callable<T> privilegedCallableUsingCurrentClassLoader(Callable<T> callable)
返回一个Callable
对象,当被调用时,将在当前访问控制上下文下执行给定的callable
,并将当前上下文类加载器作为上下文类加载器。 通常应在AccessController.doPrivileged
操作中调用此方法以创建可调用的密码 ,如果可能,将在该操作中保留的所选权限设置下执行; 或者,如果不可能,抛出一个相关的AccessControlException
。- 参数类型
-
T
- 可调用结果的类型 - 参数
-
callable
- 基础任务 - 结果
- 一个可调用的对象
- 异常
-
NullPointerException
- 如果可调用null -
AccessControlException
- 如果当前访问控制上下文没有设置和获取上下文类加载器的权限
-
-