工作中有人用webflux进行编程,不知道如何编写异步代码,我在reactor3官方文档中找到了对应的说明,亲自尝试,本质还是利用了java的线程池,我把代码贴出来,大家参考。

- public static void main(String[] args) throws InterruptedException {
-
- testAsync().subscribe();
-
- System.out.println("main thread run finish");
- TimeUnit.SECONDS.sleep(15);
-
- }
-
- private static Flux
testAsync() { - Mono.just(1).doOnNext(i -> {
- try {
- System.out.println(Thread.currentThread().getName() + " async code is running");
- TimeUnit.SECONDS.sleep(10);
-
- System.out.println(Thread.currentThread().getName() + " async code run finish");
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }).subscribeOn(Schedulers.parallel()).subscribe();
-
- return Flux.range(1, 20).doOnNext(i -> {
- System.out.println(Thread.currentThread().getName() + "-" + i);
- });
- }
- // 输出结果
- parallel-1 async code is running
- main-1
- main-2
- ...
- main-20
- main thread run finish
- parallel-1 async code run finish
意思就是交给这个线程来处理Mono/Flux任务。不阻塞当前线程。可以参考。