6.12 每日总结(说一下线程池的核心参数(线程池的执行原理知道嘛))
在线程池中一共有7个核心参数:
-
corePoolSize 核心线程数目 - 池中会保留的最多线程数
-
maximumPoolSize 最大线程数目 - 核心线程+救急线程的最大数目
-
keepAliveTime 生存时间 - 救急线程的生存时间,生存时间内没有新任务,此线程资源会释放
-
unit 时间单位 - 救急线程的生存时间单位,如秒、毫秒等
-
-
threadFactory 线程工厂 - 可以定制线程对象的创建,例如设置线程名字、是否是守护线程等
-
handler 拒绝策略 - 当所有线程都在繁忙,workQueue 也放满时,会触发拒绝策略
拒绝策略有4种,当线程数过多以后,第一种是抛异常、第二种是由调用者执行任务、第三是丢弃当前的任务,第四是丢弃最早排队任务。默认是直接抛异常。
执行流程:
-
任务在提交的时候,首先判断核心线程数是否已满,如果没有满则直接添加到工作线程执行
-
如果核心线程数满了,则判断阻塞队列是否已满,如果没有满,当前任务存入阻塞队列
-
如果阻塞队列也满了,则判断线程数是否小于最大线程数,如果满足条件,则使用临时线程执行任务
-
如果核心或临时线程执行完成任务后会检查阻塞队列中是否有需要执行的线程,如果有,则使用非核心线程执行任务
-
如果所有线程都在忙着(核心线程+临时线程),则走拒绝策略