最近看直接起个线程的方法不是太好,顺便整理下线程池的配置,直接上代码。
配置线程池
代码语言:javascript复制@Configuration
public class ThreadPoolConfig {
// 核心线程池大小
private int corePoolSize = 50;
// 最大可创建的线程数
private int maxPoolSize = 200;
// 队列最大长度
private int queueCapacity = 1000;
// 线程池维护线程所允许的空闲时间
private int keepAliveSeconds = 300;
@Bean(name = "myThreadPoolTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(maxPoolSize);
executor.setCorePoolSize(corePoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveSeconds);
// 线程池对拒绝任务(无线程可用)的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
创建TestThreadController
代码语言:javascript复制 @GetMapping("test2")
public String test2(){
testService.tset2();
return "test2";
}
创建TestService
代码语言:javascript复制 @Async("myThreadPoolTaskExecutor")
public void tset2(){
try {
log.info("test执行");
System.out.println("当前运行的线程名称:" Thread.currentThread().getName());
Thread.sleep(3000);
log.info("test执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
启动类加注解
代码语言:javascript复制@EnableAsync
@SpringBootApplication
public class TestApplication {
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
测试
腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧 。