新任务来了!
检查当前运行的线程数是否少于 corePoolSize (核心线程数):
如果少于:线程池会直接创建新的核心线程来执行这个任务。任务不会进入 workQueue。
如果不小于(即已经达到或超过 corePoolSize):进入下一步。
尝试放入 workQueue (任务队列):
线程池会尝试将任务放入任务队列 workQueue。
如果成功放入:任务在队列中等待,直到有空闲线程(可能是核心线程,也可能是后面创建的非核心线程)从队列中取出并执行它。这是最常见的情况,也是队列作为缓冲区的体现。
如果失败(通常是因为 workQueue 已经满了,对于有界队列而言):进入下一步。
创建非核心线程 (普通线程)
检查当前运行的线程数是否少于 maximumPoolSize (最大线程数):
如果少于:线程池会创建新的非核心线程来执行这个“超额”任务。这些非核心线程的目的是处理队列溢出的情况。
如果不小于(即已经达到 maximumPoolSize):进入下一步。
触发拒绝策略 (Handler)
当任务队列已满,并且当前运行的线程数也已经达到了 maximumPoolSize 时,线程池就无法再处理新的任务了。
此时,线程池会根据你设置的拒绝策略 (RejectedExecutionHandler) 来处理这个任务。