SpringBoot-注解:@Async 使用

不同类中使用@Async

线程配置初始化类-ThreadPoolConfig

package com.zzdy.recharge.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.ThreadPoolExecutor;

/**
* 线程池配置
*/
@Configuration
@EnableAsync(proxyTargetClass = true)
public class ThreadPoolConfig {

private final int core = Runtime.getRuntime().availableProcessors() + 1;

/**

* @return
*/
@Bean(name = "rechargeMorenTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(core);
// 设置最大线程数
executor.setMaxPoolSize(core * 2);
// 设置队列容量
executor.setQueueCapacity(128);
// 空闲时间
executor.setKeepAliveSeconds(300);
// 设置线程名称前缀
executor.setThreadNamePrefix("recharge-moren-thread-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 执行初始化
executor.initialize();
return executor;
}
}

调用线程类

@Slf4j
@Service
public class DataAnalysisService {

   @Async("rechargeMorenTaskExecutor")
   public ReturnData dataAnalysisService(String body){

        System.out.println(Thread.currentThread());

   }

}

同一个类中调用需要先获取代理对象,也就是手动获取对象

@Service
@EnableAsync
public class DemoService {
    public void add(){
        DemoService bean = SpringUtil.getBean(DemoService.class);
        System.out.println("开始o");
        bean.sendToKafka();
        System.out.println("结束o");
    }
    @Async
    public void sendToKafka() {
        try {
            Thread.sleep(10000);
            System.out.println(" 醒了!!! ");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

总结

1、在需要用到的@Async注解的类上加上@EnableAsync,或者直接加在springboot启动类上
2、异步处理方法(也就是加了@Async注解的方法)只能返回的是void或者Future类型
3、同一个类中调用异步方法需要先获取代理类,因为@Async注解是基于Spring AOP (面向切面编程)的,而AOP的实现是基于动态代理模式实现的。有可能因为调用方法的是对象本身而不是代理对象,因为没有经过Spring容器。。。。。。这点很重要,也是经常遇到的

相关推荐

  1. SpringBoot-注解:@Async 使用

    2024-03-27 18:38:02       19 阅读
  2. Spring异步注解@Async使用及其自定义线程池配置

    2024-03-27 18:38:02       13 阅读
  3. SpringBoot缓存注解@Cacheable使用姿势介绍

    2024-03-27 18:38:02       46 阅读
  4. springboot自动配置的条件注解使用

    2024-03-27 18:38:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 18:38:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 18:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 18:38:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 18:38:02       20 阅读

热门阅读

  1. springBoot实现热部署

    2024-03-27 18:38:02       15 阅读
  2. 排序问题HJ37 统计每个月兔子的总数

    2024-03-27 18:38:02       16 阅读
  3. Nginx(面试)

    2024-03-27 18:38:02       20 阅读
  4. Ansible Playbook 精髓:书写与应用全攻略

    2024-03-27 18:38:02       19 阅读
  5. linux命令 curl忽略https证书

    2024-03-27 18:38:02       17 阅读
  6. Linux的常用命令-1

    2024-03-27 18:38:02       18 阅读
  7. 一个好用的nginx动态变量扩展模块

    2024-03-27 18:38:02       20 阅读
  8. 通信专业毕业设计-大学校园网设计

    2024-03-27 18:38:02       18 阅读
  9. Linux 升级 Python 至 3.x

    2024-03-27 18:38:02       20 阅读
  10. 访问海外服务器速度慢的原因

    2024-03-27 18:38:02       18 阅读
  11. 记录gitlab管理代码的原理和实现

    2024-03-27 18:38:02       17 阅读