当前位置: 首页 > news >正文

java8 函数式编程 Supplier 类 supplier如何使用 supplier类作用

1. Supplier代码:

package java.util.function;

/**
 * Represents a supplier of results.
 *
 * <p>There is no requirement that a new or distinct result be returned each
 * time the supplier is invoked.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #get()}.
 *
 * @param <T> the type of results supplied by this supplier
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

 2. use demo:


import java.util.UUID;
import java.util.function.Supplier;

public class Test {

    public static void main(String[] args) {
        String uuid = buildResult(() -> UUID.randomUUID().toString().replace("-", ""));
        System.out.println(uuid);
    }

    public static String buildResult(Supplier<String> supplier) {
        return supplier.get();
    }

}

 3. 在阅读rocketmq 源码中CommitLog类doAppend方法有如下一段代码,产生了疑问,为什么使用supplier?msgId 直接赋值不是很好吗?为何多此一举,使用supplier lambda包下这块代码

 4. 大模型回答:

    4.1. 延迟计算(Lazy Evaluation)

使用 Supplier 可以实现延迟计算,即只有在真正需要消息 ID 的时候才进行计算。这在以下场景中非常有用:

  • 消息发送过程中的优化:在消息发送的过程中,可能并不需要立即生成消息 ID。使用 Supplier,可以在消息真正需要被存储或处理时才生成 ID,避免了不必要的计算开销。

  • 提高性能:如果消息在发送后很快被取消或过滤掉,那么生成消息 ID 的计算就可以被完全避免,从而提高系统性能。

  • 通过doAppend方法主要为生成AppendMessageResult对象, 最外层使用了 CompletableFuture.supplyAsync() 方法,可以方便地将消息 ID 的生成操作异步化,避免阻塞主线程。

总结: 延迟计算,避免有其他异常,返回只包含错误信息的AppendMessageResult,msgId根本不需要了,此时计算出来msgId反而是一种性能浪费。只有在使用的时候,去生成msgId! 

http://www.dtcms.com/a/70777.html

相关文章:

  • //要求:将输入的字符串中的数字转换为罗马数字,长度小于9(运用方法:Switch方法)
  • Arduino安装包、驱动、ESP离线包【2025免费下载】【附开发资源包】
  • Huggingface命令行下载开源大模型
  • 【Delphi 开箱即用 8】多进程之间共享内存的封装单元
  • Cesium零基础速成教程:一小时入门Cesium
  • 学习springboot 的自动配置原理
  • 电子招采软件系统,如何实现10年可追溯审计
  • 动态内存分配:基于C语言的详细解析与实践
  • LRU(最近最少使用)算法实现
  • java 的标记接口RandomAccess使用方法
  • Visual Studio里的调试(debugging)功能介绍
  • Python第二十二课:元学习 | 学会学习的学习
  • L1-7 统一命名规范(java)
  • C 语 言 --- 二 维 数 组 的 应 用
  • 【Python 语法】排序算法
  • redis部署架构
  • Linux书签上下移动
  • Git LFS (Large File Storage) 简介
  • redis主从搭建
  • 79.HarmonyOS NEXT 手势操作模型详解:移动、缩放与旋转的实现原理
  • 1216走迷宫
  • OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验
  • 接口自动化测试用例
  • 电路基础【2】:三极管基础:PNP与NPN三极管详解
  • 微服务》》四个问题
  • HTTP相关问题(AI回答)
  • 【Linux-传输层协议TCP】流量控制+滑动窗口+拥塞控制+延迟应答+捎带应答+面向字节流+粘包问题+TCP异常情况+TCP小结
  • 谷歌Gemini 3大模型发布,AI领域再掀波澜!
  • 数据结构与算法-图论-欧拉路径和欧拉回路(有向图和无向图,骑马修栅栏,单词游戏 play on words)详细代码注解
  • 【精华】学校机房电脑摆脱网络控制