首页 > 编程语言 >【Java】反应式编程 之 Mono.defer与Mono.just

【Java】反应式编程 之 Mono.defer与Mono.just

时间:2024-02-22 11:23:30浏览次数:23  
标签:25 Java just defer 创建 subscribe Mono

Mono.defer方法创建数据源属于懒汉型,Mono.just方法创建数据源属于恶汉型,下面看一个例子:

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import reactor.core.publisher.Mono;

import java.util.Date;

@SpringBootTest
class DemoApplicationTests {
    @Test
    void contextLoads() {
        //恶汉型:比较霸道,只创建一次
        Mono<Date> m1 = Mono.just(new Date());
        //懒汉型:比较懒,每次调用才创建
        Mono<Date> m2 = Mono.defer(() -> Mono.just(new Date()));
        m1.subscribe(System.out::println);
        m2.subscribe(System.out::println);
        //延迟5秒钟
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        m1.subscribe(System.out::println);
        m2.subscribe(System.out::println);
    }

}

输出结果

Fri Jun 04 15:25:20 CST 2021
Fri Jun 04 15:25:20 CST 2021
Fri Jun 04 15:25:20 CST 2021
Fri Jun 04 15:25:25 CST 2021

  我们可以看到,创建了两个数据源,一个使用Mono.just创建,一个用Mono.defer创建,然后分别通过lambda表达式订阅这两个publisher,可以看到两个输出的时间都是15:25:20,延迟5秒钟后重新订阅,Mono.just创建的数据源时间没变,但是Mono.defer创建的数据源时间相应的延迟了5秒钟,原因在于Mono.just会在声明阶段构造Date对象,只创建一次,但是Mono.defer却是在subscribe阶段才会创建对应的Date对象,每次调用subscribe方法都会创建Date对象

 

 

https://blog.csdn.net/qq_42322632/article/details/117562991

标签:25,Java,just,defer,创建,subscribe,Mono
From: https://www.cnblogs.com/thsrite/p/18026928

相关文章

  • 05-JavaScript基础语法
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-基础语法</title></head><body></body><script>//输出语句//1.alert()弹出警告框aler......
  • java中Helloworld!
    java第一个程序,“你好世界”建立第一个程序文件名为:HelloWorld.java如下展示点击查看代码publicclassHelloWorld{ publicstaticvoidmain(String[]args){ system.out.print("HelloWorld!"); }}注意:java类名必须和文件名一致,然后进行文件编译和运行在DOS窗口运......
  • 【性能测试】java性能问题排查提效脚本工具
    本文主要讲述针对cpu高耗和网络IO瓶颈两个场景,使用排查提效脚本工具快速定位分析性能瓶颈场景一:当服务器CPU高耗原因分析,如何快速定位到占用cpu高的用户线程top命令找出消耗CPU高的Java进程及其线程id:开启线程显示模式(top-H,或是打开top后按H)按CPU使用率排序(top缺省是按CPU......
  • 面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
    写在开头某大厂的面试现场,一位目光深邃,头顶稀疏的中年面试官坐在椅子上,这时候的我走了进来。面试官:“小伙子,学过Java中容器和数据结构了吧?”我:“嗯,学了”面试官:“ok,那你来聊一聊Java中的迭代器(Iterator),要说清楚他们的应用场景哈”我:“哦,好滴”内心独白:“这面试官不按套路......
  • idea的Java项目打成jar包并服务器部署运行
    idea的Java项目打成jar包并服务器部署运行文章目录一、idea对Java项目打jar包二、上传jar包到服务器运行一、idea对Java项目打jar包1.File—>ProjectStructure---->Artifacts2.点击+号选择JAR,再选择第二个3.出现这个框,第一个Module是你最后jar包的名字,第二个是Ma......
  • JavaScript 的新数组分组方法
    对数组中的项目进行分组,你可能已经做过很多次了。每次都会手动编写一个分组函数,或者使用lodash的groupBy函数。好消息是,JavaScript现在有了分组方法,所以你再也不必这样做了。Object.groupBy和Map.groupBy这两个新方法将使分组变得更简单,并节省我们的时间或依赖性。以前......
  • hash表与java集合框架
       1.对象被new出来后,会通过哈希函数Hash(key)建立关键字key与存储地址Addr的关系,Addr=Hash(Key),这个Addr又称HashCode。即:每个对象有唯一的HashCode。-另外:底层对对象进行hash时因为hash表长度有限所以存储可能会有冲突,为了解决冲突而在顺序表的某个存储地址上加......
  • 深入剖析 Java 类属性与类方法的应用
    Java类属性Java类属性,也称为字段,是类中的变量。它们用于存储与类相关的数据。创建类属性在类定义中声明属性:publicclassMain{intx;//属性Stringname;//属性}访问类属性使用点语法访问对象的属性:MainmyObj=newMain();myObj.x=5;//设置属性值Sy......
  • Java虚拟机小记
    目录运行时数据区域Java堆对象创建对象的内存布局对象的访问定位句柄直接指针GC判断对象是否已死引用计数算法可达性分析算法引用的类别垃圾收集算法分代收集理论标记清除算法标记复制算法标记整理算法实现细节并发的可达性分析垃圾收集器serial收集器ParNew收集器ParallelScaven......
  • Go - argument evaluation with defer
        ......