跳到主要内容

请列举ThreadPoolexecutor参数配置?

参考答案:

ThreadPoolExecutor 是 Java 中的一个类,它是 java.util.concurrent 包的一部分,主要用于处理并发编程。以下是 ThreadPoolExecutor 的构造函数参数:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

下面是每个参数的说明:

  1. corePoolSize(核心线程数):线程池的基本大小,即即使没有任务需要执行,线程池也会保持的线程数。除非设置了 allowCoreThreadTimeOut,否则核心线程不会因为闲置而被终止。
  2. maximumPoolSize(最大线程数):线程池允许创建的最大线程数。当队列满了,并且已创建的线程数小于最大线程数,线程池会再创建新的线程执行任务。
  3. keepAliveTime(保持存活时间):当线程数大于核心线程数时,这是多余空闲线程在终止前等待新任务的最长时间。
  4. unit(时间单位):keepAliveTime 的时间单位,如 TimeUnit.SECONDS 表示秒。
  5. workQueue(工作队列):用于保存待执行的任务的阻塞队列。这个队列的选择对于性能至关重要,因为它会影响线程池的行为。常见的类型有 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 等。
  6. threadFactory(线程工厂):用于创建新线程的工厂,可以通过这个工厂给每个新创建的线程设置更有意义的名字,或者实现自定义的线程创建逻辑。如果未提供,则使用默认工厂。
  7. handler(拒绝策略):当任务无法被处理时(例如,当队列已满并且线程池已达到最大线程数),就会使用此策略来处理任务。常见的拒绝策略有 AbortPolicyCallerRunsPolicyDiscardOldestPolicyDiscardPolicy 等。

注意,在创建 ThreadPoolExecutor 实例时,你需要提供上述所有参数。然而,如果你只是想使用默认的拒绝策略和线程工厂,那么你可以使用 Executors 工具类中的工厂方法(如 newFixedThreadPoolnewCachedThreadPool 等),这些方法会为你提供合理的默认值。