Spring线程池ThreadPoolTaskExecutor学习总结
发布网友
发布时间:2023-02-12 05:00
我来回答
共1个回答
热心网友
时间:2024-12-05 20:19
1.ThreadPoolTaskExecutor的基本参数:因为它是基于ThreadPoolExecutor来实现的,我们可以参考ThreadPoolExecutor的构造函数
2.线程池的执行流程:当提前任务到当前线程池时,先判断当前线程池中线程数量是否小于corePoolSize,如果小于创建新的线程处理请求,不管当前有没有线程闲置;如果大于等于,则将线程想放入阻塞队列workQueue中,线程池中存在空闲的线程后会去处理workQueue中任务;如果workQueue也满了,则会新建工作线程处理任务,当线程池中的线程大于最大线程数maxPoolSize时,则会用选定的拒绝策略来处理新的线程
下面是源码部分(使用execute()方法):
注意:ThreadPoolTaskExecutor中execute()有重载方法,但最后都是调用同一方法,处理逻辑相同
从上看出其实线程池执行任务的主要方法是addWorker()方法,execute()方法只是将任务提交以及做一些判断,我们看一下addWorker()方法:
上面源码中调用start()方法启动线程,其实是调用Worker中run()方法来启动,因为Worker实现实现了Runnable接口,如下
调用Worker的run()方法,从图中可以看出本质执行的方法是runWorker()方法,源码如下:
源码执行流程图如下: