Module java.base

Class Executors

java.lang.Object
java.util.concurrent.Executors

public class Executors extends Object
该包中定义的ExecutorExecutorServiceScheduledExecutorServiceThreadFactoryCallable类的工厂和实用方法。该类支持以下类型的方法:
  • 创建并返回一个使用常用配置设置的ExecutorService的方法。
  • 创建并返回一个使用常用配置设置的ScheduledExecutorService的方法。
  • 创建并返回一个“包装”ExecutorService的方法,通过使实现特定方法无法访问来禁用重新配置。
  • 创建并返回一个将新创建的线程设置为已知状态的ThreadFactory的方法。
  • 创建并返回一个将其他闭包形式转换为Callable以便在需要Callable的执行方法中使用的方法。
自从:
1.5
  • Method Details

    • 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()
      使用可用处理器数量作为目标并行级别创建一个工作窃取线程池。
      返回:
      新创建的线程池
      自从:
      1.8
      参见:
    • 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的调用将在可用时重用先前构造的线程。如果没有现有线程可用,将创建一个新线程并将其添加到池中。未使用的线程在六十秒后将被终止并从缓存中删除。因此,长时间空闲的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有类似属性但具有不同细节(例如,超时参数)的池。
      返回:
      新创建的线程池
    • newCachedThreadPool

      public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory)
      创建一个线程池,根据需要创建新线程,但会在可用时重用先前构造的线程,并使用提供的ThreadFactory在需要时创建新线程。
      参数:
      threadFactory - 创建新线程时要使用的工厂
      返回:
      新创建的线程池
      抛出:
      NullPointerException - 如果threadFactory为null
    • newThreadPerTaskExecutor

      public static ExecutorService newThreadPerTaskExecutor(ThreadFactory threadFactory)
      创建一个Executor,为每个任务启动一个新线程。Executor创建的线程数量是无限的。

      对代表提交给Executor的任务的待定结果的cancel(true)调用将interrupt执行任务的线程。

      参数:
      threadFactory - 创建新线程时要使用的工厂
      返回:
      为每个任务创建一个新线程的新Executor
      抛出:
      NullPointerException - 如果threadFactory为null
      自:
      21
    • newVirtualThreadPerTaskExecutor

      public static ExecutorService newVirtualThreadPerTaskExecutor()
      创建一个Executor,为每个任务启动一个新的虚拟线程。Executor创建的线程数量是无限的。

      此方法等效于使用创建虚拟线程的线程工厂调用newThreadPerTaskExecutor(ThreadFactory)

      返回:
      为每个任务创建一个新虚拟线程的新Executor
      自:
      21
    • newSingleThreadScheduledExecutor

      public static ScheduledExecutorService newSingleThreadScheduledExecutor()
      创建一个可以安排在给定延迟后运行命令或定期执行的单线程Executor。(但是请注意,如果此单个线程在关闭之前由于执行期间的失败而终止,如果需要执行后续任务,将会有一个新线程代替它。)任务保证按顺序执行,并且任何给定时间只会有一个任务处于活动状态。与否则等效的newScheduledThreadPool(1)不同,返回的Executor保证不可重新配置以使用其他线程。
      返回:
      新创建的定时Executor
    • newSingleThreadScheduledExecutor

      public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
      创建一个可以安排在给定延迟后运行命令或定期执行的单线程Executor。(但是请注意,如果此单个线程在执行期间由于失败而终止,在关闭之前将会有一个新线程代替它以执行后续任务。)任务保证按顺序执行,并且任何给定时间只会有一个任务处于活动状态。与否则等效的newScheduledThreadPool(1, threadFactory)不同,返回的Executor保证不可重新配置以使用其他线程。
      参数:
      threadFactory - 创建新线程时要使用的工厂
      返回:
      新创建的定时Executor
      抛出:
      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 - Executor创建新线程时要使用的工厂
      返回:
      新创建的定时线程池
      抛出:
      IllegalArgumentException - 如果corePoolSize < 0
      NullPointerException - 如果threadFactory为null
    • unconfigurableExecutorService

      public static ExecutorService unconfigurableExecutorService(ExecutorService executor)
      返回一个对象,将所有定义的ExecutorService方法委托给给定的Executor,但不会委托其他可能通过转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。
      参数:
      executor - 底层实现
      返回:
      一个ExecutorService实例
      抛出:
      NullPointerException - 如果executor为null
    • unconfigurableScheduledExecutorService

      public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor)
      返回一个对象,将所有定义的ScheduledExecutorService方法委托给给定的Executor,但不会委托其他可能通过转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。
      参数:
      executor - 底层实现
      返回:
      一个ScheduledExecutorService实例
      抛出:
      NullPointerException - 如果executor为null
    • defaultThreadFactory

      public static ThreadFactory defaultThreadFactory()
      返回一个用于创建新线程的默认线程工厂。此工厂在同一个ThreadGroup中为Executor使用的所有新线程创建线程。如果存在SecurityManager,则使用System.getSecurityManager()的组,否则使用调用此defaultThreadFactory方法的线程的组。每个新线程都作为非守护线程创建,优先级设置为Thread.NORM_PRIORITY和线程组中允许的最大优先级的较小者。新线程的名称可通过Thread.getName()访问,格式为pool-N-thread-M,其中N是此工厂的序列号,M是此工厂创建的线程的序列号。
      返回:
      一个线程工厂
    • privilegedThreadFactory

      @Deprecated(since="17", forRemoval=true) public static ThreadFactory 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,设置当前线程的访问控制上下文以使用在该操作中保持的选定权限设置创建线程。

      请注意,虽然在这些线程中运行的任务将具有与当前线程相同的访问控制和类加载器设置,但它们不一定具有相同的ThreadLocalInheritableThreadLocal值。如果需要,在ThreadPoolExecutor子类中可以使用ThreadPoolExecutor.beforeExecute(Thread, Runnable)在任何任务运行之前设置或重置特定的线程本地值。此外,如果需要将工作线程初始化为具有与某个其他指定线程相同的InheritableThreadLocal设置,可以创建一个自定义ThreadFactory,在其中该线程等待并处理请求以创建其他将继承其值的线程。

      返回:
      一个线程工厂
      抛出:
      AccessControlException - 如果当前访问控制上下文没有权限同时获取和设置上下文类加载器
    • callable

      public static <T> Callable<T> callable(Runnable task, T result)
      返回一个Callable对象,当调用时,运行给定任务并返回给定结果。当将需要Callable的方法应用于否则无结果的操作时,这可能很有用。
      类型参数:
      T - 结果的类型
      参数:
      task - 要运行的任务
      result - 要返回的结果
      返回:
      一个可调用对象
      抛出:
      NullPointerException - 如果task为null
    • callable

      public static Callable<Object> callable(Runnable task)
      返回一个Callable对象,当调用时,运行给定的任务并返回null
      参数:
      task - 要运行的任务
      返回:
      一个可调用对象
      抛出:
      NullPointerException - 如果任务为null
    • 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

      @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 - 如果当前访问控制上下文没有权限设置和获取上下文类加载器