工作流程
运行流程:
-
线程池创建,准备好core数量的核心线程,准备接受任务
-
新的任务进来,用core准备好的空闲线程执行。
- 如果core线程满,就将再进来的任务放入阻塞队列中。空闲的core就会自己去阻塞队列获取任务执行
- 如果阻塞队列满了,就直接开新线程执行,最大只能开到max指定的数量
- max都执行好了。Max-core数量空闲的线程会在keepAliveTime指定的时间后自动销毁。最终保持到core大
- 如果线程数开到了max的数量,还有新任务进来,就会使用reject指定的拒绝策略进行处理
-
所有的线程创建都是由指定的factory创建的。
问题 : 一个线程池core 7, max 20,queue: 50, 100并发进来怎么分配的;
答:先有7个能直接得到执行,接下来50个进入队列排队,在多开13个继续执行。现在70个被安排上了。剩下30个默认拒绝策略。
使用
- 配置线程池
@Configuration
public class MyThreadConfig {
@Bean
public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool) {
return new ThreadPoolExecutor(
pool.getCoreSize()