java springboot 异步处理@Async简单使用与线程池简单使用

当数据处理过大,无法在页面失去连接之前返回页面,就容易出现连接超时的情况

@Async简单使用

在springBoot的启动类添加注解

@EnableAsync

之后在需要使用异步的方法上使用@Async注解

ps: 异步的调用不能在同一个类中,必须在一个类中的方法去访问另一个类中加了@Async注解的方法

给@Async添加自定义线程池

在springBoot的启动类添加一个线程池如:

@Bean("taskExecutor")
    public ExecutorService Ex(){
         ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build();
        return new ThreadPoolExecutor(5,20,200L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory);
    }

之后就可以@Async("taskExecutor")使用自定义的线程池跑异步

线程池简单使用

这个线程池也可以通过注入的方式在方法中使用

 private final ExecutorService executorService;
    public TicketsServiceImpl( ExecutorService executorService) {
        this.executorService = executorService;
    }

如:

	executorService.submit(() -> {
            //需要运行的方法
        });
        //之后的代码,会与上面的线程同时执行

这种方式使用的话,主线程不会等待子线程执行完毕,之后再执行后面的代码,类似于开了异步;

第二种使用
第二种的话是带有返回值的线程,通过submit.get();使主线程进入等待状态,只有等待子线程处理完毕之后执行,后面的方法,场景的适用于一个方法中可以同时处理两个业务,并且主线程需要等待前两条业务执行完毕之后,再执行下面的代码的情况

  Future<Boolean> submit = executorService.submit(() -> {
           //需要运行的方法
          return true;
        });
       
        Future<Boolean> submit1 = executorService.submit(() -> {
           //需要运行的方法
          return true;
        }); 
 	try {
            submit.get();
  			submit1.get();
       } catch (InterruptedException e) {
            e.printStackTrace();
       } catch (ExecutionException e) {
            e.printStackTrace();
        }
        //之后的代码,会等待上面两个线程执行完毕之后再执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值