Java 线程池复用执行线程并管理任务排队与资源上限。ThreadPoolExecutor 的线程数、队列及拒绝策略共同决定过载行为。
提交路径
在线程数未到核心数时通常创建线程;达到核心数后优先尝试入队;队列无法接收时再按最大线程数判断是否增加线程,否则拒绝。无界队列下,最大线程数未必按直觉发挥作用。
容量与关闭
根据任务的 CPU、等待及下游容量设置边界。无限队列可能把过载转成内存及长等待,CallerRuns 也可能阻塞提交方,策略必须符合业务语义。
监测排队、活动线程、任务耗时及拒绝量,处理 Future 中的异常,并在生命周期结束时有序关闭。线程越多不一定吞吐越高。