面试题答案
一键面试- 处理过程:
- 当任务队列已满,且当前线程数小于最大线程数时,线程池会创建一个新的非核心线程来处理新提交的任务。
- 相关原理:
- Java线程池采用了一种“先队列,后线程”的策略。核心线程数是线程池一开始就会创建并保持运行的线程数量,它们优先从任务队列中获取任务执行。
- 任务队列用于存放提交但尚未执行的任务。当任务队列满了,意味着当前核心线程和任务队列的处理能力已经饱和。
- 为了进一步处理新提交的任务,且此时当前线程数未达到最大线程数,线程池会创建新的非核心线程来执行任务。这个过程是为了在系统负载增加时,线程池能够动态扩展线程数量,以处理更多的任务,提高系统的并发处理能力。同时,当任务处理完成后,非核心线程在一段时间内(空闲时间,由
keepAliveTime
决定)没有新任务时,会被销毁,线程池又回到核心线程数的状态,以节省系统资源。