首页 > 其他分享 >springboot线程池底的使用

springboot线程池底的使用

时间:2023-09-19 15:57:33浏览次数:42  
标签:springboot void 池底 线程 executor Async public 注解

1.简单使用

一、配置类

@Configuration
@EnableAsync
public class SpringAsyncConfig {

    @Bean("taskExecutor")
    public Executor asyncServiceExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(5);
        // 设置最大线程数
        executor.setMaxPoolSize(20);
        //配置队列大小
        executor.setQueueCapacity(Integer.MAX_VALUE);
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(60);
        // 设置默认线程名称
        executor.setThreadNamePrefix("xcc");
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //执行初始化
        executor.initialize();
        return executor;
    }
}

二、使用

public interfacr TestService{
      /**
     * 异步
     */
    void test();

    /**
     * 同步
     */
    void testThread();
}
@Service
public class TestServiceImpl implements TestService {
      @Async("taskExecutor")
    @Override
    public void test() {
        testThread();
    }


    @Override
    public void testThread(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2.注解@async什么情况下失效

  • 1、注解@Async的方法不是public方法
  • 2、注解@Async的返回值只能为void或Future
  • 3、注解@Async方法使用static修饰也会失效
  • 4、没加注解@Async或EnableAsync注解,导致无法扫描到异步类
  • 5、调用方与被调用方不能再同一个类
  • 6、类中需要使用@Autowired或@Resource等注解自动注入,不能手动new对象
  • 7、在Async方法上标注@Transactional是没用的,但在Async方法调用的方法标注@Transcational是有效的

标签:springboot,void,池底,线程,executor,Async,public,注解
From: https://www.cnblogs.com/cgy1995/p/17714864.html

相关文章

  • 线程劫持-进程注入C++示例和检测思考
    线程劫持:运行方法C:\Users\l00379637\source\repos\thread_hijack\x64\Release\thread_hijack.exe18132C:\Users\l00379637\source\repos\injected_dll\x64\Release\injected_dll.dllProcessID:18132Injected!劫持效果: 劫持代码如下:#include<iostream......
  • SpringBoot 后端配置 Https 教程
    以阿里云为例子1.申请SSL证书1.注册域名打开阿里云官网,搜索域名点击域名注册,输入域名,点击搜索选择心仪的域名,点击购买,打钱进入域名控制台,进行实名认证2.申请SSL证书打开阿里云官网,搜索SSL证书点击免费证书,领取20张券(一年可以领20张,可以创建20张免......
  • 万字长文深度解读Java线程池,硬核源码分析
    前言本文将深入分析Java线程池的源码,包括线程池的创建、任务提交、工作线程的执行和线程池的关闭等过程。通过对线程池源码的解析,我们能够更好地理解线程池的原理和机制,为我们在实际开发中合理使用线程池提供指导。文章内容较长,建议找个安静的环境慢慢细读,由于线程池涉及的内容......
  • Java并发Map的面试指南:线程安全数据结构的奥秘
    简介在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域。然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,如竞态条件和数据不一致性。本文将探讨如何在Java中有效地应对这些挑战,介......
  • Java并发Map的面试指南:线程安全数据结构的奥秘
    简介在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域。然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,如竞态条件和数据不一致性。本文将探讨如何在Java中有效地应对这些挑战,......
  • Springboot使用@value获取配置文件参数
    使用@value获取yml参数值@Value("${value}")//多级使用.连接例:${value.value}privateStringvalue;@value获取不到值的情况//错误1:使用了static或者final修饰valueprivatestaticStringvalue;privatefinalStringvalue;//错误2:类没有加上@Component(或者@Ser......
  • springboot中配置druid的依赖,与application.yml中设置druid的相关配置
    2023-09-18<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency>application.ymlsprin......
  • Win32编程之线程池(十二)
    一、线程池概念介绍1.线程的执行流程2.线程池原理线程创建API和线程池API对比:二、线程池异步函数的调用三、线程池的周期性调用四、线程池内核对象触发调用五、线程池IO完成调用 ......
  • SpringBoot 启动时报错Unable to start embedded Tomcat
    导读最近公司有个gradle构建的工程,需要改造成maven方式构建(点我直达)。转为maven后,启动时一直报tomcat错误,最终排查是因为servlet-api这个包导致的依赖冲突,将这个依赖排除即可启动解决排除依赖,检查项目是否包含:javax.servlet-api<exclusions><exclusi......
  • Springboot简单功能示例-5 使用JWT进行授权认证
    springboot-sample介绍springboot简单示例-使用JWT进行授权认证跳转到发行版查看发行版说明软件架构(当前发行版)Springboot3.1.3hutoolbcprov-jdk18on安装教程gitclone--branch自定义加密进行登录验证[email protected]:simen_net/springboot-sample.git主要功......