面试官心理剖析

面试官询问线程池的核心参数和执行原理,主要是为了评估候选人的基础知识掌握情况、技术深度、问题解决能力以及学习态度和适应能力。

作为候选人,应该充分准备并清晰地解释线程池的核心参数(如核心线程数、最大线程数、队列容量等)和执行原理(如任务提交、线程创建与销毁、任务执行与调度等),以展示自己的专业素养和解决问题的能力。

线程池7大参数(ThreadPoolExecutor)

  1. corePoolSize:核心线程数,线程池中始终存活的线程数。

  2. maximumPoolSize:最大线程数,线程池中允许的最大线程数,当线程池的任务队列满了之后可以创建的最大线程数。最大线程数目=(核心线程+救急线程的最大数目)

  3. keepAliveTime:最大线程数可以存活的时间,当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程。

  4. TimeUnit:单位是和参数 3 存活时间配合使用的,合在一起用于设定线程的存活时间 ,参数 keepAliveTime 的时间单位有以下 7 种可选:

TimeUnit.DAYS:天
TimeUnit.HOURS:小时
TimeUnit.MINUTES:分
TimeUnit.SECONDS:秒
TimeUnit.MILLISECONDS:毫秒
TimeUnit.MICROSECONDS:微妙
TimeUnit.NANOSECONDS:纳秒
  1. workQueue:一个阻塞队列,用来存储线程池等待执行的任务,均为线程安全,它包含以下 7 种类型:

ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列,即直接提交给线程不保持它们。
PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻                                        塞方法。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
较常用的是 LinkedBlockingQueue 和 Synchronous,线程池的排队策略与 BlockingQueue 有关。
  1. threadFactory:线程工厂,主要用来创建线程,默认为正常优先级、非守护线程。

  2. handler:拒绝策略,拒绝处理任务时的策略,系统提供了 4 种可选

执行原理

原理图