单体的线程每次请求频繁的创建,请求过后频繁的销毁,导致线程栈中的资源的大量消耗。
线程池的出现在于对单体线程的可控性,管理资源的消耗。
使用异步去配置线程池的话,如图
此时此刻,没有指定Bean的名字,出现一个问题就是启动默认的Async线程池了,并且没有走你自己配置的线程池
走配置的话需要指定Bean名称,让他去覆盖
1 @Bean("taskExecutor") 2 public AsyncTaskExecutor getAsyncE(){ 3 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 4 executor.setCorePoolSize(coreSize); 5 executor.setMaxPoolSize(maxSize); 6 executor.setQueueCapacity(queueSize); 7 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); 8 executor.setThreadNamePrefix("MyThread-"); 9 return executor; 10 }
打印如图
不需要指定Bean名称,如果不指定池子的大小默认为1
1 @Bean 2 public ThreadPoolTaskScheduler getTaskScheduled(){ 3 ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); 4 //配置池子的大小 5 taskScheduler.setPoolSize(20); 6 //拒绝策略为 抛出异常 7 taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); 8 //设置名字 9 taskScheduler.setThreadNamePrefix("MyScheduled-"); 10 return taskScheduler; 11 }
底层全是ThreadPoolExecutor,默认策拒绝略都是AbortPolicy,LinkedBlockingQueue=Integer_Max_Value
四种策略
原文:https://www.cnblogs.com/honour1207/p/14201003.html