java响应式编程基础

2025-10-13 06:25:47 巴西世界杯阵容

什么是响应式编程

Java 响应式编程(Reactive Programming)是一种​​基于事件驱动​​和​​异步数据流​​的编程范式,旨在通过非阻塞的方式高效处理数据流和异步操作。它的核心思想是​​响应变化​​(如数据更新、用户事件、网络请求等),并通过链式调用的方式组合异步操作

核心概念​​

​​数据流(Data Stream)​​:一切皆为流,数据以连续事件的形式流动(如用户输入、API 响应、数据库查询结果)。

​​响应式(Reactive)​​:系统能够自动感知数据流的变化,并触发相应的处理逻辑。

​​异步与非阻塞​​:避免线程阻塞,提高资源利用率(如高并发场景下更高效)。

​​背压(Backpressure)​​:下游控制上游的数据生产速度,防止因生产者过快导致内存溢出。

响应式编程 vs 传统编程​​

​​特性​​​​传统编程​​​​响应式编程​​

​​执行模型​​

同步阻塞(如 Thread.sleep())

异步非阻塞(如 Mono.subscribe())

​​资源利用​​

线程与资源占用高

高效利用线程池(如 Reactor 的调度器)

​​适用场景​​

简单任务、低并发

高并发、实时数据处理(如微服务、流式计算)

什么是Reactive

是一种理念​​:它定义了系统如何通过异步、非阻塞、事件驱动的方式响应变化(如用户请求、数据流、故障等)。

java 响应式生态​​

​​Project Reactor​​:Spring 5+ 的响应式核心库,提供 Flux(N元素流)和 Mono(0/1元素流)。

​​RxJava​​:基于 ReactiveX 的库,提供丰富的操作符(如 map, filter, zip)。

​​Spring WebFlux​​:基于 Reactor 的异步非阻塞 Web 框架,支持响应式 HTTP 服务。

响应式编程的优势​​

​​高吞吐量​​:非阻塞模型允许少量线程处理大量并发请求。

​​弹性​​:自动处理故障(如重试、熔断)。

​​实时性​​:适合实时数据推送(如 WebSocket、股票行情)。

​​资源高效​​:避免线程池过度膨胀。

简单使用

1、pom引入

io.projectreactor

reactor-core

3.6.5

import reactor.core.publisher.Flux;

import reactor.core.publisher.Mono;

public class ReactiveDemo {

public static void main(String[] args) {

// 1. 创建一个包含 1, 2, 3 的 Flux 数据流

Flux numbers = Flux.just(1, 2, 3)

.log(); // 打印日志(观察数据流事件)

// 2. 使用操作符处理数据流

Flux processedStream = numbers

.filter(n -> n % 2 == 0) // 过滤偶数

.map(n -> "Number: " + n) // 转换为字符串

.doOnNext(s -> System.out.println("Processed: " + s)); // 副作用操作

// 3. 订阅并消费数据流

processedStream.subscribe(

item -> System.out.println("Received: " + item), // 处理数据

error -> System.err.println("Error: " + error), // 错误处理

() -> System.out.println("Stream completed") // 完成回调

);

// 保持主线程不退出(仅示例需要)

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

王者荣耀的铠要多少印 王者荣耀:铠的印记系统详解
解决GitHub个人博客打不开的常见问题与解决方案