线程池核心流程
2021-12-21 03:05:45 0 举报
线程池核心流程
作者其他创作
大纲/内容
false
启动成功
是
t.start()启动线程
workerCountOf(recheck) == 0
判断当前线程池状态是否是正在运行状态或者shutDown或者 firstTask状态
workers.remove(w);从 workers 集合中移除这个 worker原子递减核心线程数
tryTerminate()尝试结束线程池
如果之前的线程已被销毁完,新建一个线程
true
否
workerCountOf(c) < corePoolSize判断当前线程数是否小于核心线程数
最终执行runWorker()执行任务
return false
reject(command);
如果task==null
任务添加到队列中
workers.add(w); 将新创建的 Worker 添加到 workers 集合中
execute(task)
isRunning(c) && workQueue.offer(command)核心池已满,判断是否能添加到阻塞队列中
throw new NullPointerException()
! isRunning(recheck) && remove(command)
c = ctl.get()
if (wc >= CAPACITY || wc >= (core ? corePoolSize : maximumPoolSize))
阻塞队列已满
判断线程池是否为正在运行状态,如果否则删除该线程
如果创建新线程失败了
启动失败
0 条评论
下一页