【技术分享】线程池核心线程数与最大线程数的区别|任务数超过最大线程...

发布网友

我来回答

1个回答

热心网友

核心线程数与最大线程数在构建线程池时至关重要。核心线程数(corePoolSize)定义了线程池中的最少线程数。每当有新的任务提交至线程池时,若当前线程数量未达到核心线程数,则会新建线程执行任务并保留,直至任务结束。若当前线程数量已达核心线程数,则继续判断。

若线程池的工作队列(workQueue)未满,则任务会被提交至队列中;若已满,则线程池会判断是否达到最大线程数(maximunPoolSize)。若未达到最大值,则会创建新线程执行任务。一旦达到最大线程数,线程池会根据任务的特性选择处理策略。

在核心线程数基础上,线程池的线程数量会随任务负载动态调整。当线程空闲时间超过keepAliveTime,线程将被终止,直至线程池中线程数量降至核心线程数。

线程池饱和时的策略各异,AbortPolicy会直接抛出异常,CallerRunsPolicy则使用当前线程执行新任务,DiscardPolicy直接忽略任务,DiscardOldestPolicy则移除队列最前面的任务以容纳新任务。用户亦可自定义策略。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com