28_fixed线程池原理
2021-04-21 16:23:07 0 举报
fixed线程池原理
作者其他创作
大纲/内容
run
任务
cas 递增线程数修改 ctl
是
linkedBlockingQueue(阻塞无界队列)
放入线程池
是否在工作
否
循环所有worker
reject 拒绝任务提交策略
修改状态
Worker.run()runWorer()
重新创建空线程
核心线程池(HashSet)
队列是否已满
worker 是AQS且在运行是会加锁判断线程是否在工作,只需要尝试加锁,能获取到锁,说明线程未工作中
获取核心线程时workQueue.take()获取不到任务会阻塞当有任务入队时,会进行唤醒。阻塞队列自己的特性
释放空闲线程
thread(基于 线程工厂创建)getThreadFactory().newThread(this)Runnable:Worker
创建非核心线程
循环尝试cas 修改ctl的状态为 SHUTDOWN:0
是否正常运行
加锁
线程总数<=maximumPoolSize
返回
独占锁
执行发生异常
Worker(AQS的子类继承runnable)
非核心线程池
修改线程池状态
interruptIdleWorkers
shutdown
移除当前工作线程
创建线程
中断线程
线程数<corePoolSize
0 条评论
下一页