【thread】优雅的使用线程池

2022-06-11 09:46:47 浏览数 (3)

最近在优化项目的多线程的使用方法,以前都是显示的使用线程启动,造成启动的线程多了,比较占用系统的资源,随即着手优化了下项目的线程使用方法。

一、老式方法

都是显式的调用,并且阿里巴巴开发手册并不推荐这样使用。

代码语言:javascript复制
        //新建线程并执行任务类
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName()   ":异步任务");
        }).start();

二、优化方法

创建线程池配置

代码语言:javascript复制
@Configuration
public class AsyncConfig {

    private static final int MAX_POOL_SIZE = 50;

    private static final int CORE_POOL_SIZE = 20;

    @Bean("asyncTaskExecutor")
    public AsyncTaskExecutor asyncTaskExecutor() {
        ThreadPoolTaskExecutor asyncTaskExecutor = new ThreadPoolTaskExecutor();
        asyncTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
        asyncTaskExecutor.setCorePoolSize(CORE_POOL_SIZE);
        asyncTaskExecutor.setThreadNamePrefix("async--pool-");
        asyncTaskExecutor.initialize();
        return asyncTaskExecutor;
    }
}

启用异步支持

启动类上添加@EnableAsync注解

代码语言:javascript复制
@SpringBootApplication
@EnableAsync
public class SpringbootAsyncApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootAsyncApplication.class, args);
    }

}

在其它类中使用线程池

先注入线程池类,再使用线程类的submit方法即可

代码语言:javascript复制
@Autowired
private AsyncTaskExecutor asyncTaskExecutor;


@GetMapping("/")
public String test() {
    // 使用异步线程池 线程
    asyncTaskExecutor.submit(() -> {
        log.info(Thread.currentThread().getName()   "asyncTaskExecutor");
    });
    return "ok";
}

这样我们就使用上了线程池的配置,也不用显式的去使用线程池了。

threadthread

线程池生效啦,暂时先写到这里。

参考资料

https://huanzi-qch.gitee.io/spring-boot/#/docs/《SpringBoot

总结

腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!

0 人点赞