自定义线程池
线程池的创建需要七个参数
核心线程数;线程池中长期存在的线程数量
最大线程数;线程中允许存在的最大线程数
临时线程存活时间;当线程池中的线程数量超过核心线程数时,多余的空闲线程在等待新任务时的最大存活时间;
临时线程存活时间单位;存活时间单位
阻塞队列;用于存放提交但尚未被执行的任务的阻塞队列
线程工厂;用于创建新线程的工厂。
拒绝策略;当线程池关闭或线程池和队列都已饱和时,用来处理新提交的任务的策略;
拒绝策略
默认:直接抛出异常;
用调用者所在的线程来执行任务;
直接丢弃新任务,不做任何处理;
丢弃队列中最旧的一个任务,然后尝试重新提交当前任务;
线程池的工作流程
当有新任务提交时,首先检查核心线程数是否已满,若没有满,则会创建一个新的核心线程来执行当前任务;
若核心线程已满,在判断工作队列是否空闲,若空闲,则进入工作队列进行等待空闲线程从队列中获取并执行;
若阻塞队列已满,判断当前线程数是否小于最大线程数,若小于,则开启临时线程池,创建一个新的临时线程来立即执行该任务;
若最大线程数已满,则会触发拒绝策略来处理这个新任务;