线程池源码学习
2025-02-25 23:25:19 0 举报
线程池源码学习
作者其他创作
大纲/内容
FutureTask:封装Callable和有返回结果
Executor:接口,执行器,里面有个执行方法,执行Runnable线程
ExecutorService子类ThreadPoolExecutor
Callable:类似Runnable,有返回值
CompletableFuture:首先它是一个Future,会存一个返回结果
可以对多个任务进行多种操作的管理
为什么使用线程池
线程池的底层原理是什么
线程池的源码中有哪些重要内容
①private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //ctl属性:包含两个属性workerCount(后29)、runState(高三位)
runState:
五种状态
RUNNING:接受新的任务以及处理队列中的任务
SHUTDOWN:不接受新的任务,但是处理队列中的任务
STOP:不接受新的任务也不处理队列中的任务,以及中断正在执行中的任务
TIDYING:所有的任务已经结束,工作线程数量为0,线程状态为TIDYING,然后调用terminated结束线程的过渡状态
TERMINATED:terminated(),已经完全终止了
运行状态的流转
②线程池中重点参数
一些参数说明
线程池构造函数
七大核心参数
参数如何设置?
corePoolSize:核心线程数如何设置?
maximumPoolSize:最大核心线程数如何设置?
workQueue:如何选择合适的队列?
线程池重点方法
①执行任务void execute
具体方法如下:
执行流程
②将任务添加到队列中 boolean addWorker
具体代码如下
③运行任务
具体代码如下
③线程终止
具体代码如下
④线程立即终止
具体代码如下
⑤Worker类
代码如下
⑥线程执行异常,线程池如何处理的?
代码如下
线程池拒绝策略有哪些?
AbortPolicy:直接抛异常
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
throw new RejectedExecutionException("Task " + r.toString() +
" rejected from " +e.toString());
}
throw new RejectedExecutionException("Task " + r.toString() +
" rejected from " +e.toString());
}
CallerRunsPolicy:线程池无法处理,将任务交给调用者处理任务,如主线程,即同步处理,不异步处理了
拒绝策略如下:
DiscardPolicy:线程池无法处理任务时,将任务丢弃掉,不处理
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
}
}
DiscardOldestPolicy:意思是当线程池无法处理任务时,将队列中队首任务拉取并删除掉,然后再执行当前任务
拒绝策略如下:
如何自定义一个线程池?
线程池中有哪些设计模式?
0 条评论
下一页