Java响应式编程

devtools/2024/11/19 6:16:22/

Java响应式编程是一种基于异步和非阻塞的编程范式,旨在处理现代应用中日益增长的高并发、海量数据以及低延迟需求。通过响应式编程,开发者能够以更加优雅和高效的方式编写能够应对这些挑战的应用程序。

Quick start

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

java">import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;public class ReactiveExample {public static void main(String[] args) {// 使用Mono表示一个单一的值Mono<String> mono = Mono.just("Hello, Reactive World!");mono.subscribe(System.out::println);// 使用Flux表示多个值的序列Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);flux.map(i -> i * 2).subscribe(System.out::println);}
}

在这里插入图片描述

体现被背压的例子

背压(Backpressure)是响应式编程中的一个重要概念,特别是在数据生产者和消费者之间的速率不匹配时尤为重要。当数据生产者的速度超过了消费者的处理能力时,背压机制允许消费者通知生产者减慢数据的发送速度,避免系统过载。

下面是一个简单的Java示例,展示了如何使用Reactor库中的 Flux 和背压机制。在这个例子中,我们将创建一个快速生产数据的 Flux,然后使用背压机制让消费者以更慢的速度处理这些数据。

java">import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;
import java.time.Duration;public class BackpressureExample {public static void main(String[] args) throws InterruptedException {// 创建一个每隔10毫秒产生一个元素的FluxFlux<Long> fastProducer = Flux.interval(Duration.ofMillis(10)).onBackpressureBuffer(10, dropped -> System.out.println("Dropped: " + dropped)).take(100);  // 仅处理前100个元素// 让消费者处理每个元素的速度慢于生产者fastProducer.publishOn(Schedulers.boundedElastic())  // 使用一个独立的线程来处理.doOnNext(item -> {try {// 模拟慢速消费者,处理每个元素需要100毫秒Thread.sleep(100);System.out.println("Processed: " + item);} catch (InterruptedException e) {e.printStackTrace();}}).subscribe();// 主线程等待所有元素处理完毕Thread.sleep(20000);}
}

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/104826.html

相关文章

人该怎样活着呢?48

人该怎样活着呢&#xff1f; A多观察多思考 【思考问答】 &#xff08;20240411&#xff09; B记录自己的灵感。 &#xff08;20240412&#xff09; 别人抢不走的东西&#xff1a;肚子里的食物&#xff0c;脑子里的知识&#xff0c;还有梦想&#xff08;202011…

一起学习LeetCode热题100道(61/100)

61.分割回文串(学习) 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]] 示例 2&#xff1a; …

java编辑器——IntelliJ IDEA

java编辑器有两种选择——IntelliJ IDEA和VsCode。其中IntelliJ IDEA现在是企业用的比较多的&#xff0c;是专门为java设计的&#xff0c;而VsCode则是通过插件来实现Java编辑的。 1.IntelliJ IDEA 官网下载链接&#xff1a;https://www.jetbrains.com/idea/ 注意选择社区版…

惠中科技化解光伏板清洁难题

惠中科技化解光伏板清洁难题 在绿色能源革命的浪潮中&#xff0c;光伏电站作为清洁能源的璀璨明珠&#xff0c;正以前所未有的速度照亮着能源转型的道路。然而&#xff0c;光伏板长期暴露于自然环境中&#xff0c;不可避免地遭受灰尘、鸟粪、油污等污染物的影响&#xff0c;让…

深入理解Redis(一)----Redis简介+Redis为什么这么快

一.Redis简介 Redis是一个开源的内存中的数据结构存储系统&#xff0c;它可以用作&#xff1a;数据库、缓存和消息中间件。 注&#xff1a;数据库的作用相当于MySQL&#xff0c;可以永久存储相关的数据&#xff0c;和MySQL不一样的是&#xff0c;Redis提供了多种数据基本数据类…

探索未知,悦享惊喜 —— 您的专属盲盒小程序,即将开启奇妙之旅

在这个充满无限可能的数字时代&#xff0c;每一次点击都可能是通往惊喜的门户。我们匠心打造的“惊喜盲盒”小程序&#xff0c;正是为了给您带来前所未有的娱乐体验与心灵触动。在这里&#xff0c;每一份盲盒都蕴藏着精心挑选的宝藏&#xff0c;等待着与您的不期而遇。 【探索…

网络层 III(划分子网和构造超网)【★★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、网络层转发分组的过程 分组转发都是基于目的主机所在网络的&#xff0c;这是因为互联网上的网络数远小于主机数&#xff0c;这样可以极大地压缩转发表的大小。…

【国考】特值法

特值法 题干中存在乘除关系&#xff0c;且对应量未知。 例3&#xff1a;甲、乙、丙三个工程队的效率比为6&#xff1a;5&#xff1a;4,现将A、B两项工作量相同的工程交给这三个工程队,甲队负责A工程,乙队负责B工程,丙队参与A工程若干天后转而参与B工程.两项工程同时开工,耗时16…