前言
在程序中遍历处理数据时,一个线程需要按照遍历顺序执行,这影响了执行速度,此刻可以引入多线程,开启多个线程同时执行任务。
一、spring项目中多线程的配置
新建spring配置类,注入bean到容器中
@Configuration注解用来声明这是一个spring配置类
@EnableAsync注解用来开启多线程
@Configuration
@EnableAsync
public class AsyncConfiguration {
@Bean("async")
public Executor doSomethingExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 核心线程数:线程池创建时候初始化的线程数
executor.setCorePoolSize(10);
// 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
executor.setMaxPoolSize(20);
// 缓冲队列:用来缓冲执行任务的队列
executor.setQueueCapacity(500);
// 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
// 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
executor.setThreadNamePrefix("async-");
// 缓冲队列满了之后的拒绝策略:由调用线程处理(一般是主线程)
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
二、使用步骤
1.有一个集合,要使用多线程遍历处理它
代码如下(示例):
List<Integer> list = Arrays.asList(1, 2, 3, 4);
for (Integer item : list) {
handle(item);
}
@Async("async")
public void handle(Integer item){
System.out.println("处理" + item);
}
使用@Async(“async”)注解,声明该方法可以多线程异步执行