响应式编程

1. 响应式编程

当执行多个操作的时候,不会阻塞线程,每一个操作可以认为是开启一个新的线程,如果下一个操作想获取上一个操作的结果,那么此时就需要订阅上一个操作。上一个操作有结果,会立刻执行下一个操作。响应式编程基于发布订阅模式。
发布订阅模式需要一个容器来实现数据传输:Mono,Mono容器只会存储一个数据,一个线程发布数据到Mono中,另外一个线程订阅Mono。Mono中存在数据,订阅Mono的线程会立刻执行。
flux:可以存储多个数据

2. 阻塞式编程

通过一个线程完成多个操作,只有一个线程操作完毕以后才可以执行下一个操作,在执行下一个操作之前,线程处于阻塞状态。
代码示例:

public class ReactorTest {

    public static void main(String[] args) {

//        String data = getData();
//        System.out.println("main线程调用");
//        System.out.println(data);

//        Mono<String> resultData = getResultData();   // 不会阻塞线程
//        System.out.println("main线程调用");
//
//        resultData.subscribe((data) -> {       // 订阅Mono,一旦Mono产生了数据,那么此时就会执行该方法
//            System.out.println(data);
//        });

        Flux<String> fluxData = getFluxData();
        fluxData.subscribe(s -> {
            System.out.println(s);
        }) ;

    }

    // 响应式编程Flux
    public static Flux<String> getFluxData() {
        Flux<String> dataFlux = Flux.fromStream(Stream.of("atguigu" , "very")) ;
        return dataFlux ;
    }

    // 响应式编程
    public static Mono<String> getResultData() {
        Mono<String> mono = Mono.fromCallable(() -> {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "ok";
        });
        return mono ;

    }

    // 阻塞式编程
    public static String getData() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "ok" ;
    }

}
posted @ 2023-09-12 17:53  摆烂ing  阅读(51)  评论(0)    收藏  举报