# springboot中使用多线程Async+CountDownLatch+Future **Repository Path**: zj_zff/springbootAsyncDemo ## Basic Information - **Project Name**: springboot中使用多线程Async+CountDownLatch+Future - **Description**: 对于有返回值的线程任务,没有必要使用coutDownLatch 了,因为 future.get()就是个阻塞方法,会挂起主线程,直到该子线程执行结束。 如果使用没有返回值的子线程,而且需要等待多个子线程执行完成,那么可以考虑使用CountDownLatch来控制 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-21 - **Last Updated**: 2023-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot中使用多线程Async+CountDownLatch+Future #### 介绍 对于有返回值的线程任务,没有必要使用coutDownLatch 了,因为 future.get()就是个阻塞方法,会挂起主线程,直到该子线程执行结束。 如果使用没有返回值的子线程,而且需要等待多个子线程执行完成,那么可以考虑使用CountDownLatch来控制 #### 软件架构 软件架构说明 #### 安装教程 1. 直接运行 #### 使用说明 1. controller:就一个简单的请求,调用service,主要逻辑在service层 2. service:模拟了使用三个子线程去执行任务,详细看注释(写代码不注释,写了个寂寞) 3. 自定义的FutureResult 类,用于满足自己的需求,方便查看子线程的状态,以及子线程执行结果 4. 自定义线程池:TaskPoolConfig, 如何自定义线程池,各看官可再行研究 在方法上加上@Async注解,不起作用时检查下面几点: 调用者和@Async注解使用的方法在一个类时候可能会不起作用,原因是这个注解需要经过代理对象进行调用才有效(感谢大佬的指点,我的解决办法:分开放在不同的类中)。 在启动类上开启注解,也就是在启动类xxxApplication.java 上加上注解@EnableAsync 使用@Async注解的方法归结为两种:没有返回值,有返回值(返回值类型必须是Future类型,return new AsyncResult<>(xxxx);) 无返回值,比较简单,在方法上加上和@Async注解即可,有线程池方法的在后面括号中写上线程池方法名(@Async("myAsync")),不要忘了在启动类上加上注解@EnableAsync。 注意:如果有返回值时候,返回值一定是Future #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request