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