发布网友
共1个回答
热心网友
核心线程数与最大线程数在构建线程池时至关重要。核心线程数(corePoolSize)定义了线程池中的最少线程数。每当有新的任务提交至线程池时,若当前线程数量未达到核心线程数,则会新建线程执行任务并保留,直至任务结束。若当前线程数量已达核心线程数,则继续判断。
若线程池的工作队列(workQueue)未满,则任务会被提交至队列中;若已满,则线程池会判断是否达到最大线程数(maximunPoolSize)。若未达到最大值,则会创建新线程执行任务。一旦达到最大线程数,线程池会根据任务的特性选择处理策略。
在核心线程数基础上,线程池的线程数量会随任务负载动态调整。当线程空闲时间超过keepAliveTime,线程将被终止,直至线程池中线程数量降至核心线程数。
线程池饱和时的策略各异,AbortPolicy会直接抛出异常,CallerRunsPolicy则使用当前线程执行新任务,DiscardPolicy直接忽略任务,DiscardOldestPolicy则移除队列最前面的任务以容纳新任务。用户亦可自定义策略。