模块 java.base

类 Executors

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

public class Executors extends Object
此包中定义的 Executor ExecutorService ScheduledExecutorService ThreadFactory Callable 类的工厂方法和实用方法。该类支持以下几种方法:
  • 使用常用配置设置创建和返回 ExecutorService 设置的方法。
  • 使用常用配置设置创建和返回 ScheduledExecutorService 设置的方法。
  • 创建并返回“包装的”ExecutorService 的方法,通过使特定于实现的方法不可访问来禁用重新配置。
  • 创建并返回 ThreadFactory 的方法,它将新创建的线程设置为已知状态。
  • 从其他类似闭包的形式创建和返回 Callable 的方法,因此它们可以用于需要 Callable 的执行方法。
自从:
1.5
  • 方法详情

    • 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 为空
      IllegalArgumentException - 如果 nThreads <= 0
    • newSingleThreadExecutor

      public static ExecutorService  newSingleThreadExecutor()
      创建一个 Executor,它使用单个工作线程在无界队列中运行。 (但是请注意,如果此单个线程在关闭之前的执行过程中因故障而终止,则如果需要执行后续任务,一个新线程将取代它。)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的 newFixedThreadPool(1) 不同,返回的执行程序保证不能重新配置以使用其他线程。
      返回:
      新创建的单线程执行器
    • newSingleThreadExecutor

      public static ExecutorService  newSingleThreadExecutor(ThreadFactory  threadFactory)
      创建一个 Executor,它使用单个工作线程在无界队列中运行,并在需要时使用提供的 ThreadFactory 创建新线程。与其他等效的 newFixedThreadPool(1, threadFactory) 不同,返回的执行程序保证不能重新配置以使用其他线程。
      参数:
      threadFactory - 创建新线程时使用的工厂
      返回:
      新创建的单线程执行器
      抛出:
      NullPointerException - 如果 threadFactory 为空
    • newCachedThreadPool

      public static ExecutorService  newCachedThreadPool()
      创建一个线程池,该线程池根据需要创建新线程,但会在可用时重用以前构造的线程。这些池通常会提高执行许多短期异步任务的程序的性能。调用 execute 将重用以前构造的线程(如果可用)。如果没有可用的现有线程,将创建一个新线程并将其添加到池中。 60 秒内未使用的线程将被终止并从缓存中删除。因此,保持空闲时间足够长的池不会消耗任何资源。请注意,可以使用 ThreadPoolExecutor 构造函数创建具有相似属性但不同细节(例如,超时参数)的池。
      返回:
      新创建的线程池
    • newCachedThreadPool

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

      public static ExecutorService  newThreadPerTaskExecutor(ThreadFactory  threadFactory)
      newThreadPerTaskExecutor 是 Java 平台的预览 API。
      程序只能在启用预览功能时使用 newThreadPerTaskExecutor
      预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。
      创建一个执行器,为每个任务启动一个新线程。 Executor 创建的线程数是无限的。

      在表示提交给执行器的任务的未决结果的 Future 上调用 cancel(true) interrupt 线程执行该任务。

      参数:
      threadFactory - 创建新线程时使用的工厂
      返回:
      为每个任务创建新线程的新执行器
      抛出:
      NullPointerException - 如果 threadFactory 为空
      自从:
      19
    • newVirtualThreadPerTaskExecutor

      public static ExecutorService  newVirtualThreadPerTaskExecutor()
      newVirtualThreadPerTaskExecutor 是 Java 平台的预览 API。
      程序只能在启用预览功能时使用 newVirtualThreadPerTaskExecutor
      预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。
      创建一个执行器,为每个任务启动一个新的虚拟线程。 Executor 创建的线程数是无限的。

      这个方法相当于调用newThreadPerTaskExecutor(ThreadFactory) PREVIEW 使用创建虚拟线程的线程工厂。

      返回:
      一个新的执行器,为每个任务创建一个新的虚拟线程
      抛出:
      UnsupportedOperationException - 如果未启用预览功能
      自从:
      19
    • newSingleThreadScheduledExecutor

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

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

      public static ExecutorService  unconfigurableExecutorService(ExecutorService  executor)
      返回一个对象,该对象将所有定义的 ExecutorService 方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。
      参数:
      executor - 底层实现
      返回:
      一个ExecutorService实例
      抛出:
      NullPointerException - 如果执行者为空
    • unconfigurableScheduledExecutorService

      public static ScheduledExecutorService  unconfigurableScheduledExecutorService(ScheduledExecutorService  executor)
      返回一个对象,该对象将所有定义的 ScheduledExecutorService 方法委托给给定的执行程序,但不委托任何其他可以使用强制转换访问的方法。这提供了一种安全地“冻结”配置并禁止调整给定具体实现的方法。
      参数:
      executor - 底层实现
      返回:
      一个ScheduledExecutorService实例
      抛出:
      NullPointerException - 如果执行者为空
    • 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()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法仅与 安全管理器 结合使用,后者已弃用并会在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。
      返回一个线程工厂,用于创建与当前线程具有相同权限的新线程。该工厂使用与 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 - 如果动作为空
    • callable

      public static Callable <Object > callable(PrivilegedExceptionAction <?> action)
      返回一个 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 - 如果可调用 null
      AccessControlException - 如果当前访问控制上下文没有设置和获取上下文类加载器的权限