线程池的相关面试

25 阅读1分钟

自定义线程池

线程池的创建需要七个参数

核心线程数;线程池中长期存在的线程数量

最大线程数;线程中允许存在的最大线程数

临时线程存活时间;当线程池中的线程数量超过核心线程数时,多余的空闲线程在等待新任务时的最大存活时间;

临时线程存活时间单位;存活时间单位

阻塞队列;用于存放提交但尚未被执行的任务的阻塞队列

线程工厂;用于创建新线程的工厂。

拒绝策略;当线程池关闭或线程池和队列都已饱和时,用来处理新提交的任务的策略;

拒绝策略

默认:直接抛出异常;

用调用者所在的线程来执行任务;

直接丢弃新任务,不做任何处理;

丢弃队列中最旧的一个任务,然后尝试重新提交当前任务;

线程池的工作流程

当有新任务提交时,首先检查核心线程数是否已满,若没有满,则会创建一个新的核心线程来执行当前任务;

若核心线程已满,在判断工作队列是否空闲,若空闲,则进入工作队列进行等待空闲线程从队列中获取并执行;

若阻塞队列已满,判断当前线程数是否小于最大线程数,若小于,则开启临时线程池,创建一个新的临时线程来立即执行该任务;

若最大线程数已满,则会触发拒绝策略来处理这个新任务;