专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
Java仓库  ·  这招聘环境,绷不住了。。 ·  10 小时前  
Java仓库  ·  这招聘环境,绷不住了。。 ·  10 小时前  
芋道源码  ·  一款颜值超高,功能还特别强大的SSH工具 ·  10 小时前  
芋道源码  ·  实现 Springboot 程序加密,禁止 ... ·  昨天  
芋道源码  ·  5.6K ... ·  2 天前  
芋道源码  ·  手把手教你实现一个Java Agent ·  2 天前  
51好读  ›  专栏  ›  芋道源码

实现异步编程,我有八种方式!

芋道源码  · 公众号  · Java  · 2025-04-13 16:57

正文

请到「今天看啥」查看全文


,这些都是典型的可以通过异步实现的场景。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

二、异步的八种实现方式

  1. 线程Thread
  2. Future
  3. 异步框架CompletableFuture
  4. Spring注解@Async
  5. Spring ApplicationEvent事件
  6. 消息队列
  7. 第三方异步框架,比如Hutool的ThreadUtil
  8. Guava异步

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

三、什么是异步?

首先我们先看一个常见的用户下单的场景:

什么是异步

在同步操作中,我们执行到 「发送短信」 的时候,我们必须等待这个方法彻底执行完才能执行 「赠送积分」 这个操作,如果 「赠送积分」 这个动作执行时间较长,发送短信需要等待,这就是典型的同步场景。

实际上,发送短信和赠送积分没有任何的依赖关系,通过异步,我们可以实现 赠送积分 发送短信 这两个操作能够同时进行,比如:

异步

这就是所谓的异步,是不是非常简单,下面就说说异步的几种实现方式吧。

四、异步编程

4.1 线程异步

public class AsyncThread extends Thread {

    @Override
    public void run() {
        System.out.println("Current thread name:" + Thread.currentThread().getName() + " Send email success!");
    }

    public static void main(String[] args) {
        AsyncThread asyncThread = new AsyncThread();
        asyncThread.run();
    }
}

当然如果每次都创建一个 Thread 线程,频繁的创建、销毁,浪费系统资源,我们可以采用线程池:

private ExecutorService executorService = Executors.newCachedThreadPool();

public void fun() {
    executorService.submit(new Runnable() {
        @Override
        public void run() {
            log.info("执行业务逻辑...");
        }
    });
}

可以将业务逻辑封装到 Runnable Callable 中,交由线程池来执行。

4.2 Future异步

@Slf4j
public class FutureManager {

    public String execute() throws Exception {

        ExecutorService executor = Executors.newFixedThreadPool(1);
        Future future = executor.submit(new Callable() {
            @Override
            public String call() throws Exception {

                System.out.println(






请到「今天看啥」查看全文


推荐文章
Java仓库  ·  这招聘环境,绷不住了。。
10 小时前
Java仓库  ·  这招聘环境,绷不住了。。
10 小时前
芋道源码  ·  手把手教你实现一个Java Agent
2 天前
算法与数学之美  ·  关于投资的12个数学原理
8 年前
南都周刊  ·  我总是可以找到好看的书和电影!
8 年前
经典短篇阅读小组  ·  配合
7 年前