springboot自义定线程池
在boot项目中添加一个自定义线程池的配置
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ThreadPoolExecutor; @Configuration public class ThreadPoolConfig { @Bean public ThreadPoolTaskExecutor myThreadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //此方法返回可用处理器的虚拟机的最大数量; // int core = Runtime.getRuntime().availableProcessors(); int core = 30; //设置核心线程数 executor.setCorePoolSize(core); //设置最大线程数 executor.setMaxPoolSize(core * 10 + core); //除核心线程外的线程存活时间 executor.setKeepAliveSeconds(3); //缓冲队列 executor.setQueueCapacity(core); executor.setThreadNamePrefix("thread-execute"); //设置拒绝策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; }
在启动类上添加@EnableAsync注解开启多线程
方法上面@Async("myThreadPoolTaskExecutor") 指定使用那个线程池配置,不然会使用spring默认的线程池
也可以自己在使用线程时指定对应的线程池,CompletableFuture这个工具包提供方法还是挺多,不过这个就需要慢慢去探索啦!
public static void main(String[] args) throws ExecutionException, InterruptedException { CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { int sum = 0; for (int i = 1; i <= 10; i++) { sum += i; } return sum; },myThreadPoolTaskExecutor);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1;
}, myThreadPoolTaskExecutor);
CompletableFuture.allOf(future1, future2);
System.out.println(future1.get() + future2.get());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)