java线程池主要处理流程
2018-06-21 15:09:51 142 举报
java线程池
作者其他创作
大纲/内容
maximumPool
主线程
AbortPolicy
execute()
3
线程
corePool
将任务存储在队列中
创建线程执行任务
线程池 是否已满
提交任务
CallerRunsPolicy
使用者
否
队列是否已经满了
源码分析:上面的流程分析让我们很直观地了解了线程池的工作原理,让我们再通过源代码来看看是如何实现的,线程池执行任务的方法如下。
poll()take()
按照策略处理无法执行的任务
线程者
是
4
DiscardOldestPolicy
BlockingQueue
2
1
线程池的主要处理流程
DiscardPolicy
核心线程池是否已满
RejectExecutionHandler
Runnable.run()
ThreadPoolExecutor执行execute方法分下面4种情况。1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。2) 如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。3)如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务(注意,执行这一步骤需要获取全局锁)。4)如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectedExecutionHandler.rejectedExecution()方法。
0 条评论
下一页