配置线程池的作用及优点:
1:创建线程和销毁线程的过程是一个极度消耗内存的一个操作,那么整合了线程池就可以对其进行优化。
2:线程池可以提供定时、定期、单线程、并发数控制等功能。可以发起N秒以后执行的任务。
3:不会影响主线程的操作。可以优化一些操作的执行速度。
准备工作:
创建了一个boot基本项目写了一个简单查询。
2.在这个服务方法里面写一个延迟方法。
public void Ther(){
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
System.out.println("延迟中。。。");
}
这样在list方法调用那么那个访问那个接口就会产生延迟。
这样就影响到了主业务的速度。那么我们将他转换成一个线程池的方式,开放一个子线程执行那个延迟,就不会影响到我的主业务。我们也可以将一些影响主业务速度的子业务放在里面提高执行速度。那么我们开始改造。
线程池改造:
创建一个配置类
//开启多线程
@Configuration
@EnableAsync
public class Thr {
/**
* 核心线程数
* 默认的核心线程数为1
*
*/
private static final int CORE_POOL_SIZE = 5;
/**
* 最大线程数
* 默认的最大线程数是Integer.MAX_VALUE 即2<sup>31</sup>-1
*/
private static final int MAX_POOL_SIZE = 50;
/**
* 缓冲队列数
* 默认的缓冲队列数是Integer.MAX_VALUE 即2<sup>31</sup>-1
*/
private static final int QUEUE_CAPACITY = 100;
/**
* 允许线程空闲时间
* 默认的线程空闲时间为60秒
*/
private static final int KEEP_ALIVE_SECONDS = 30;
/**
* 线程池前缀名
*/
private static final String THREAD_NAME_PREFIX = "Task_Service_Async_";
/**
* allowCoreThreadTimeOut为true则线程池数量最后销毁到0个
* allowCoreThreadTimeOut为false
* 销毁机制:超过核心线程数时,而且(超过最大值或者timeout过),就会销毁。
* 默认是false
*/
private boolean allowCoreThreadTimeOut = false;
@Bean("taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(CORE_POOL_SIZE);
taskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
taskExecutor.setQueueCapacity(QUEUE_CAPACITY);
taskExecutor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS);
taskExecutor.setThreadNamePrefix(THREAD_NAME_PREFIX);
taskExecutor.setAllowCoreThreadTimeOut(allowCoreThreadTimeOut);
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//线程池初始化
taskExecutor.initialize();
return taskExecutor;
}
}
接下来就简单了:
在你想要在子线程执行的方法上面添加一条代码。
在去运行代码
这样线程池配置就结束了。