Spring Boot使用多线程

引言:Spring作为容器为我们托管对象,但是有时我们需要多线程执行任务,那么我们该如何配置呢?

解决:利用java的线程池Executor执行任务

步骤


1.配置TaskExecutor

这里直接将线程池注入

CorePoolSize代表执行任务的线程数量

public class TaskExecutorConfig implements AsyncConfigurer{//实现AsyncConfigurer接口

    @Bean
    public Executor getAsyncExecutor() {//实现AsyncConfigurer接口并重写getAsyncExecutor方法,并返回一个ThreadPoolTaskExecutor,这样我们就获得了一个基于线程池TaskExecutor
         ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
            taskExecutor.setCorePoolSize(5);
            taskExecutor.setMaxPoolSize(10);
            taskExecutor.setQueueCapacity(25);
            taskExecutor.initialize();
            return taskExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }

}
这里我们得到了一个基于java的线程池Executer的线程池,然后设置了部分参数,返回了一个实例


2.编写我们需要执行的任务,并注明service

@Service
@Slf4j
public class AsyncTaskService {

  @Async
  public void dataTranslate(int i)
  {
    log.info("启动了线程"+i);

  }

}

这里用日志打印


3.将线程池对象注入,并调用任务service。


最后在application中开始异步支持@EnableAsync

调用结果:可以看到,是不同的线程执行了打印任务,而且根据cpu时间片,抢占,可以看到线程执行顺序也发生了变化,说明是异步执行





总结:Spring Boot对多线程的支持和Spring没什么两样,就是需要先配置线程池,然后注入bean,再写异步方法,最后调用就可以了。

关于多线程中还有许多问题,如线程同步等就需要在写代码时多注意多思考了。另外,合理配置线程池参数也很重要

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值