线程池工作流程
2020-07-21 09:28:47 53 举报
线程池详细工作流程
作者其他创作
大纲/内容
任务队列
将任务存储在队列中
按拒绝策略处理无法执行的任务
主线程Runnable.run()
线程
当一个线程完成任务时,它会从队列中取下一个任务来执行
DiscardOldestPolicy
RejectedExecutionHandler
线程池工作流程
使用者
DiscardPolicy
线程池
创建线程执行任务
队列是否已满
execute()主要处理流程
maximumPool
任务
提交任务
1. 当调用execute方法添加一个请求任务时,会做以下判断流程
是
创建线程池后,等待请求
CallerRunsPolicy
4. 如果这时队列已满且正在运行的线程数量小于等于最大线程数,那么会创建非核心线程立即运行这些任务;
1
3
4
当一个线程无事可做超过一定时间(keepAliveTime)时,线程会判断:如果当前运行的线程数大于corePoolSize,那么这个线程就会被销毁;所以线程池所有任务完成后,它最终会收缩至corePoolSize大小
3. 如果核心线程池已满,那么将这个任务放入队列;
execute()
5
5. 如果队列满了且正在运行的线程数量大于或等于最大线程数,那么线程池会启动饱和拒绝策略;
corePool
2
核心线程池是否已满
2. 如果正在运行的线程数量小于核心线程池,那么马上创建线程运行这个任务
AbortPolicy
线程池是否已满
否
0 条评论
下一页