线程池:ThreadPoolExecutor原理
2020-11-18 18:42:09 0 举报
线程池原理
作者其他创作
大纲/内容
<RunnableFuture>阻塞队列
HashSet<Worker>(运行池)
RunnableFuture
添加
超时关闭的设定超时时间,超时时间内获取即不关闭
firstTask
Worker(firstTask= RunnableFuture)
使用offer添加任务到队列中,如果队列满了,直接返回false
判断核心线程数是否够了,如果够了就调用poll方法,调用keepAliveTime时间,如果超时返回,那么就结束任务。如果核心线程数不够,就使用take方法,一直阻塞
getTask
Callable
运行之后直接执行RunnableFuture任务运行池线程数必须小于等于核心线程数相当于添加一个核心线程
线程池中实际运行的Runnable方法实际上运行池中的运行线程一视同仁最终关闭的是最早空闲的Worker
1、运行数小于核心数
Worker(firstTask= null)
run
2、运行数大于核心数
worker工作流程
Runnable
workQueue.take()
运行之后从阻塞队列中获取一个任务运行池线程数必须小于等于最大线程数相当于添加一个非核心线程
非核心线程
核心线程
将Runnable和Callable统一包装成RunnableFuture对象
线程池原理
workQueue.offer(RunnableFuture)
3、加入阻塞队列失败
Task
不超时关闭的一直阻塞
0 条评论
下一页