温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java API接口怎样异步

发布时间:2026-10-02 11:01:01 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 里,“API 接口异步”通常有三种常见场景,下面按从最常见到进阶给你讲,并附示例。


一、Spring Boot 接口异步返回(最常用 ✅)

适合:接口马上返回,后台慢慢处理(如发邮件、写日志)

1️⃣ 开启异步支持

@SpringBootApplication
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2️⃣ Service 方法异步

@Service
public class AsyncService {

    @Async
    public void doWork() {
        // 模拟耗时
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {}
        System.out.println("异步任务完成");
    }
}

3️⃣ Controller 调用

@RestController
public class TestController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/test")
    public String test() {
        asyncService.doWork();
        return "请求已接收";
    }
}

✅ 客户端立刻收到响应
✅ 后台任务异步执行


二、接口返回 Future / CompletableFuture(带结果)

适合:接口需要异步计算结果后返回

@Async
public CompletableFuture<String> asyncTask() {
    return CompletableFuture.completedFuture("处理完成");
}
@GetMapping("/future")
public CompletableFuture<String> future() {
    return asyncService.asyncTask();
}

Spring 会自动等 CompletableFuture 完成再返回结果。


三、使用线程池(推荐 ✅)

避免默认线程池问题:

@Configuration
public class AsyncConfig {

    @Bean("asyncExecutor")
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("async-");
        executor.initialize();
        return executor;
    }
}
@Async("asyncExecutor")
public void doWork() {}

四、Servlet 原生异步(较少用)

@RequestMapping("/async")
public void async(HttpServletRequest request) {
    AsyncContext context = request.startAsync();
    context.start(() -> {
        // 业务逻辑
        context.complete();
    });
}

五、消息队列(真正解耦 ✅✅)

适合:高并发、可靠异步

接口 → MQ → 消费者
  • RabbitMQ
  • Kafka
  • RocketMQ

总结对比

方式 是否立即返回 是否带结果 推荐度
@Async ✅ ❌/✅ ⭐⭐⭐⭐
CompletableFuture ✅ ✅ ⭐⭐⭐⭐
线程池 ✅ ❌ ⭐⭐⭐⭐
Servlet Async ✅ ❌ ⭐⭐
MQ ✅ ❌ ⭐⭐⭐⭐⭐

如果你有具体场景(如:接口超时、批量处理、高并发、Spring Cloud),我可以给你更精确的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手