线程池
2022-06-13 12:57:03 1 举报
线程池
作者其他创作
大纲/内容
等待进入synchronized,等待获取锁
线程
创建线程执行任务
5
maximumPool
线程的生命周期
TERMINATED终止
是
获取到锁
工作流程
Object.wait()Object.join()LockSupport.park()
READY就绪
WAITING等待
unit时间单位
RejectedExecutionHandler
工作线程为空
线程池的参数
线程的状态转换
线程池
TERMINATED终止状态
当一个线程空闲超过一定时间(keepAliveTime)时,如果当前运行的线程数大于corePoolSize,那么该线程就会被销毁。所以线程池所有任务完成后,它最终会收缩至corePoolSize大小
创建线程池后,等待请求
3
否
实现Runnable
线程创建的三种方式
keepAliveTime空闲时间
NEW新建
TIMED_WAITING等待
唤醒
系统调度yield()
线程池是否已满
继承Thread
Thread.sleep()Object.wait(Long)Object.join()LockSupport.parknanos(Long)LockSupport.parkUntil(Long)
DiscardOldestPolicy丢弃阻塞队列中等待最长的线程
RUNNABLE运行
2
workQueue阻塞队列
thread
BLOCKED阻塞
5. 如果队列满了且正在运行的线程数量大于或等于最大线程数,那么线程池会启动饱和拒绝策略。
任务
阻塞
按拒绝策略处理无法执行的任务
LockSupport.unpark()Object.notify()Object.notifyAll()
CallerRunsPolicy由当前线程自己执行本线程
执行完成
execute()
SHUTDOWN关闭状态
主线程Runnable.run()
线程的创建与销毁
2. 如果正在运行的线程数量小于核心线程池,那么马上创建线程执行该任务
terminated()
1.不接受新任务2.也不处理阻塞队列的任务3.并中断正在工作的任务
execute()主要处理流程
maximumPoolSize最大线程数
DiscardPolicy直接丢弃
核心线程池是否已满
handler拒绝策略
当一个线程完成任务时,它会从队列中取下一个任务来执行
corePoolSize核心线程数
STOP停止状态
系统调用
线程池工作流程
shutDownNow()
RUNNING运行状态
1.调用execute方法添加请求任务,执行逻辑
队列为空,工作线程为空
将任务存储在队列中
使用者
1
threadFactory线程工厂
3. 如果核心线程池已满,那么将该任务放入队列
队列是否已满
实现Callable
实例化
4. 如果此时队列已满且正在运行的线程数量小于等于最大线程数,那么会创建非核心线程立即执行这些任务。
4
线程池状态转换
任务队列
AbortPolicy直接抛异常
1.不接收新任务2.可以处理阻塞队列任务
thread.start()
shutDown()
提交任务
corePool
正常接受任务
TIDYING过渡状态
0 条评论
下一页