1、先定义线程池大小
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author
* @title: CommonThreadPoolExecutor
* @description: CommonThreadPoolExecutor 自定义线程池
* @date 2023/5/20 11:12
*/
@Configuration
public class CommonThreadPoolExecutor {
@Bean
public ThreadPoolTaskExecutor threadPoolExecutor(){
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(4);
threadPoolTaskExecutor.setMaxPoolSize(20);
threadPoolTaskExecutor.setKeepAliveSeconds(300);
threadPoolTaskExecutor.setQueueCapacity(500);
threadPoolTaskExecutor.setThreadNamePrefix("myThread---");
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return threadPoolTaskExecutor;
}
}
2、线程池使用
<!-- 使用hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.17</version>
</dependency>
import cn.hutool.core.collection.CollUtil;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@SpringBootApplication
public class Application {
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
static Application ME;
@PostConstruct
void init() {
ME = this;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
List<Object> list= new ArrayList<>();
// 每个list中包含100条数据
List<List<Object>> lists = CollUtil.split(list, 100);
List<CompletableFuture<Void>> collect = lists.stream().map(arr -> {
return CompletableFuture.runAsync(() -> {
for (Object o : arr) {
//任务方法
}
}, ME.threadPoolTaskExecutor);
}).collect(Collectors.toList());
CompletableFuture.allOf(collect.toArray(new CompletableFuture[0])).join();
}