响应式编程
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" ;
}
}
作者:摆烂ing
出处:http://www.cnblogs.com/insilently/
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必追究法律责任
出处:http://www.cnblogs.com/insilently/
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必追究法律责任

浙公网安备 33010602011771号