springboot实现异步接口

适用范围:不需要返回值且想要接口非常快的的需求,例如数据埋点,日记等,废话不多说直接开始搭建项目。

首先用idea创建一个springboot工程项目

1.在启动类上加注解 @EnableAsync 开启异步任务

2.编写正常controller不依赖service的返回值

3.编写service,开启异步任务,方法没有返回值

/**
* 在什么都不配置的情况下,测试默认开启8个线程处理任务,线程名称为task-1 ~ task-8
* @throws Exception
*/
@Async
public void asyncTask() throws Exception{
    long start = System.currentTimeMillis();
    System.out.println("当前线程名称:" + Thread.currentThread().getName());
    Thread.sleep(20000);
    long end = System.currentTimeMillis();
    System.out.println("service任务执行:" + (end-start));
}

4.配置线程池配置,然后什么都不用管就行了

@Configuration
public class ThreadExecutorConfig {

    /**
     * 配置线程池
     * ThredPoolTaskExcutor的处理流程:当池子大小小于corePoolSize,就新建线程,并处理请求
     *                当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去workQueue中取任务并处理
     *                当workQueue放不下任务时,就新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize,就用RejectedExecutionHandler来做拒绝处理
     *                当池子的线程数大于corePoolSize时,多余的线程会等待keepAliveTime长时间,如果无请求可处理就自行销毁
     *                其会优先创建  CorePoolSiz 线程, 当继续增加线程时,先放入Queue中,当 CorePoolSiz  和 Queue 都满的时候,就增加创建新线程,当线程达到MaxPoolSize的时候,就会抛出错
     *               另外MaxPoolSize的设定如果比系统支持的线程数还要大时,会抛出java.lang.OutOfMemoryError: unable to create new native thread 异常。
     * @return
     */
    @Bean
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        // 线程池维护线程的最少数量
        taskExecutor.setCorePoolSize(5);
        // 线程池维护线程的最大数量
        taskExecutor.setMaxPoolSize(10);
        // 缓存队列
        taskExecutor.setQueueCapacity(10);
        taskExecutor.setThreadNamePrefix("MyThread");
        // 设置拒绝策略
        taskExecutor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
            @Override
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                // .....
                System.out.println("do somethings by myself ...");
            }
        });
        taskExecutor.initialize();
        return taskExecutor;
    }
}

测试快速的请求接口,即使线程阻塞也会发现请求非常的快

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值