搜了一下,如果是传统的那种基于线程+阻塞IO的方式,有配置参数可以控制最大线程并发数量,另外还有线程池的做法. 参见: Spring @Async limit number of threads
如果是非阻塞IO的做法,需要使用 Spring 5. 一种是 Spring MVC (Servlet)模式, 另一种是 Spring WebFlux模式.
参见 Understanding Spring Reactive: Servlet 3.1/Spring MVC Non-Blocking IO
Understanding Spring Reactive: Introducing Spring WebFlux
Java Mono, Flux相关知识: Java反应式框架Reactor中的Mono和Flux
Webflux中可以用WebClient异步发起对其他服务的请求: Spring5 Webflux之Webclient使用
Java里的Promise: CompletableFuture. 参见Promise
Promise
那Mono
看这种链式调用, 脑壳痛: How do I wait for a List
也许…换门语言, 比如Kotlin里的Corotine就很棒!
Kotlin的异步编程(基于协程): Asynchronous programming techniques
但很可惜,Java编译器不支持这种操作,所以在不动bytecode/编译链的情况下,基本上没可能在Java里实现协程了。Can I take advantage of Kotlin’s Coroutines by using them in Java code?