线程池执行流程
2021-12-24 10:39:35 0 举报
线程池execute函数执行流程
作者其他创作
大纲/内容
线程总数小于核心线程数 ?workerCountOf(c) < corePoolSize
返回return
ThreadPoolExecutor的Execute方法工作流程: 1、如果当前运行的线程少于corePoolSize,则创建新的工作线程来执行任务(执 行这一步骤需要获取全局锁)。 2、如果当前运行的线程大于或等于corePoolSize,而且BlockingQueue未满,则将任务加入到BlockingQueue中。 3、如果BlockingQueue已满,而且当前运行的线程小于maximumPoolSize,则创建新的工作线程来执行任务(执行这一步骤需要获取全局锁)。 4、如果当前运行的线程大于或等于maximumPoolSize,任务将被拒绝,并调用 RejectExecutionHandler.rejectExecution()方法。即调用饱和策略对任务进行处理。
拒绝线程reject(command)
true
重新检查运行状态 ?isRunning(recheck)
false
失败
添加队列成功 ?workQueue.offer(command)
成功
1、进行空循环 2、检查,若运行状态>= SHUTDOWN或者队列是空的return false 3、循环判断容量是否大于corePoolSize/maximumPoolSize,大于直接返回false,否则线程个数通过CAS操作加1 4、new Worker(firstTask)获取thread,上锁检查状态等操作 5、启动线程 start,最终调用Worker的runWorker方法
队列的offer方法和队列的add方法本质是一样的,就是往队列中放数据,add会调用offer
执行函数execute(Runnable command)
运行状态 ? isRunning(c)
工作线程数为0 ?
队列移除线程成功?remove(command)
0 条评论
下一页