Spring线程池ThreadPoolTaskExecutor学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring线程池ThreadPoolTaskExecutor学习总结相关的知识,希望对你有一定的参考价值。

参考技术A 1.ThreadPoolTaskExecutor的基本参数:因为它是基于ThreadPoolExecutor来实现的,我们可以参考ThreadPoolExecutor的构造函数

2.线程池的执行流程:当提前任务到当前线程池时,先判断当前线程池中线程数量是否小于corePoolSize,如果小于创建新的线程处理请求,不管当前有没有线程闲置;如果大于等于,则将线程想放入阻塞队列workQueue中,线程池中存在空闲的线程后会去处理workQueue中任务;如果workQueue也满了,则会新建工作线程处理任务,当线程池中的线程大于最大线程数maxPoolSize时,则会用选定的拒绝策略来处理新的线程

下面是源码部分(使用execute()方法):
注意:ThreadPoolTaskExecutor中execute()有重载方法,但最后都是调用同一方法,处理逻辑相同

从上看出其实线程池执行任务的主要方法是addWorker()方法,execute()方法只是将任务提交以及做一些判断,我们看一下addWorker()方法:

上面源码中调用start()方法启动线程,其实是调用Worker中run()方法来启动,因为Worker实现实现了Runnable接口,如下

调用Worker的run()方法,从图中可以看出本质执行的方法是runWorker()方法,源码如下:

源码执行流程图如下:

以上是关于Spring线程池ThreadPoolTaskExecutor学习总结的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Spring开发和监控线程池服务

JDK线程池和Spring线程池的使用

转Spring线程及线程池的使用

Spring自带的线程池ThreadPoolTaskExecutor

Spring线程池配置

Spring Cloud Gateway中netty线程池优化