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