跳到主要内容

Java创建线程池的几个核心构造参数?

参考答案:

在Java中,java.util.concurrent.ThreadPoolExecutor类提供了创建线程池的功能。以下是这个类的一些重要构造参数:

  1. corePoolSize:核心线程数。线程池创建后,当有新任务提交时,如果线程池中的线程数小于核心线程数,即使其他空闲线程可以执行新任务,线程池也会优先创建新线程来处理新任务。当线程池中的线程数达到核心线程数后,新任务会进入队列等待执行。
  2. maximumPoolSize:最大线程数。线程池允许的最大线程数。当队列满了,并且当前线程数小于最大线程数,线程池会再创建新的线程来处理任务。如果当前线程数已经达到最大线程数,那么新提交的任务将会被拒绝。
  3. keepAliveTime:空闲线程存活时间。当线程池中的线程数量超过corePoolSize时,这是多余空闲线程在终止前等待新任务的最长时间。超过这个时间后,多余的线程会被终止。这个参数只有在allowCoreThreadTimeOut设置为true时才会对核心线程起作用。
  4. unit:时间单位。keepAliveTime参数的时间单位,如TimeUnit.SECONDS表示秒,TimeUnit.MILLISECONDS表示毫秒等。
  5. workQueue:任务队列。一个用于存储待执行任务的阻塞队列。这个队列必须是一个BlockingQueue<Runnable>的实现。常见的队列有ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue等。
  6. threadFactory:线程工厂。用于创建新线程的线程工厂。你可以通过实现ThreadFactory接口来创建自己的线程工厂,然后在创建ThreadPoolExecutor时传入。
  7. handler:拒绝策略。当任务无法提交到线程池时(比如,当线程池已关闭,或者当线程池中的线程数已经达到maximumPoolSize并且队列已满),会执行这个拒绝策略。Java提供了几种内置的拒绝策略,如AbortPolicyCallerRunsPolicyDiscardOldestPolicyDiscardPolicy,你也可以实现RejectedExecutionHandler接口来创建自己的拒绝策略。

以上就是创建Java线程池的一些核心构造参数。