面试题答案
一键面试主要构成元素及职责
- ThreadPoolExecutor:
- 职责:ElasticSearch中的线程池核心实现基于Java的
ThreadPoolExecutor
。它负责管理线程的创建、复用和销毁,控制线程池的大小(包括核心线程数、最大线程数),并且管理任务队列。例如,当有新任务提交时,它会根据当前线程池状态,判断是直接启动新线程执行任务(如果当前线程数小于核心线程数),还是将任务放入任务队列(如果当前线程数达到核心线程数且任务队列未满),又或是直接拒绝任务(如果任务队列已满且当前线程数达到最大线程数)。
- 职责:ElasticSearch中的线程池核心实现基于Java的
- TaskQueue:
- 职责:任务队列用于存储等待执行的任务。不同类型的任务队列(如
ArrayBlockingQueue
、LinkedBlockingQueue
等)在ElasticSearch线程池中有不同的应用场景。例如LinkedBlockingQueue
适用于需要处理大量任务的场景,它是一个无界队列(除非在构造时指定容量),可以缓存大量任务,避免因任务过多而直接触发拒绝策略。
- 职责:任务队列用于存储等待执行的任务。不同类型的任务队列(如
- RejectedExecutionHandler:
- 职责:当线程池无法处理新任务(任务队列已满且线程数达到最大线程数)时,
RejectedExecutionHandler
会决定如何处理这些被拒绝的任务。ElasticSearch中可能会实现不同的拒绝策略,比如AbortPolicy
(直接抛出异常拒绝任务)、CallerRunsPolicy
(让提交任务的线程自己执行任务)等,以满足不同的业务需求。
- 职责:当线程池无法处理新任务(任务队列已满且线程数达到最大线程数)时,
- ThreadFactory:
- 职责:负责创建新线程。在ElasticSearch中,通过自定义的
ThreadFactory
可以对线程进行一些个性化设置,比如设置线程名称前缀,方便在日志等地方进行线程的跟踪和调试;还可以设置线程的优先级等。
- 职责:负责创建新线程。在ElasticSearch中,通过自定义的