springboot异步的两种方法

1.使用springboot自带的异步

1. 在启动类中开启异步

    加上注解:

    @EnableAsync

2. 异步的类上需要加@Component,如果这个类是异步的话需要在类上加@Async

     如果某个方法是则只需要在方法上加上注解

3.注意点:

  1)要把异步任务封装到类里面,不能直接写到Controller
  2)增加Future<String> 返回结果 AsyncResult<String>("task执行完成");
  3)如果需要拿到结果 需要判断全部的 task.isDone()
  4) @Async使用,必须是public方法 必须是非static方法,如果返回报错则是环绕增强的问题,需要返回对象,如Object

2.使用线程池异步

1. ThreadPoolUtils 工具类

复制代码
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolUtils {
    private static volatile ThreadPoolExecutor pool = null;

    public static ThreadPoolExecutor getThreadPool() {
        if (pool == null) {
            synchronized (ThreadPoolUtils.class) {
                if (pool == null) {
                    pool = createPool(10, 100);
                }
            }
        }
        return pool;
    }

    /**
     * 创建线程池
     *
     * @param corePoolSize  核心线程数量
     * @param maxThreadSize 最大线程数
     * @return
     */
    private static ThreadPoolExecutor createPool(int corePoolSize, int maxThreadSize) {
        return new ThreadPoolExecutor(corePoolSize, maxThreadSize, 0,
                TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
    }
}
View Code
复制代码

2. 使用线程池创建线程

复制代码
ThreadPoolExecutor threadPool = ThreadPoolUtils.getThreadPool();
threadPool.submit(new Callable<Boolean>() {
  @Override
   public Boolean call() throws Exception {
      return sendEmail("保险产品审核表",emails,"未审核的产品",is);
      }
   });
View Code
复制代码

3. threadPool.submit()是可以获取返回结果的,call方法里返回的数据,

4. Feature feature = submit.get()

submit.get方法是一个阻塞方法,如果开启的线程内的逻辑没有处理完成,它会等开启的线程处理完成。
submit.get(10, TimeUnit.SECONDS)//设置线程的超时时间。
posted @   这都没什么  阅读(2678)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示