当前位置: 首页 > 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! 

相关文章:

  • //要求:将输入的字符串中的数字转换为罗马数字,长度小于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 手势操作模型详解:移动、缩放与旋转的实现原理
  • 招商基金总经理徐勇因任期届满离任,“老将”钟文岳回归接棒
  • 专家:炎症性肠病发病率上升,需加强疾病早期诊断
  • 印军称中国向巴基斯坦提供防空系统协助,外交部:中方十分重视与印、巴两国关系
  • 铜川耀州窑遗址内违法矿场存在多年,省市区文物部门多次处罚叫停仍在生产
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 丰富“互换通”产品类型,促进中国金融市场高水平对外开放