如何在Java/Spring中异步高并发

搜了一下,如果是传统的那种基于线程+阻塞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

一文带你了解Spring 5.0 WebFlux应用场景

Java Mono, Flux相关知识: Java反应式框架Reactor中的Mono和Flux

Webflux中可以用WebClient异步发起对其他服务的请求: Spring5 Webflux之Webclient使用

Java里的Promise: CompletableFuture. 参见Promise

Promise回调的写法和Mono很像, 但是Java Promise是可以有Async/Await的. 例如: Async Await in Java. 可以尝试 electronicarts/ea-async

那Mono是否也可以有async/await呢?

看这种链式调用, 脑壳痛: How do I wait for a List to get resolved?

也许…换门语言, 比如Kotlin里的Corotine就很棒!

Kotlin的异步编程(基于协程): Asynchronous programming techniques

但很可惜,Java编译器不支持这种操作,所以在不动bytecode/编译链的情况下,基本上没可能在Java里实现协程了。Can I take advantage of Kotlin’s Coroutines by using them in Java code?