同时从多个线程使用同一个 FluxSink 是否安全

2024-01-18

我认识一个Publisher不得同时发布,但如果我使用Flux#create(FluxSink),我可以安全地打电话吗FluxSink#next同时?

换句话说,Spring 是否具有内部魔力来确保事件的正确串行发布,即使FluxSink#next被同时调用?

public class FluxTest {

    private final Map<String, FluxSink<Item>> sinks = new ConcurrentHashMap<>();

    // Store a new sink for the given ID
    public void start(String id) {
        Flux.create(sink -> sinks.put(id, sink));
    }

    // Called from different threads
    public void publish(String id, Item item) {
        sinks.get(id).next(item); //<----------- Is this safe??
    }
}

It 对我来说听起来 like 这一段 http://projectreactor.io/docs/core/release/reference/#producing.create官方指南中表明上述确实是安全的,但我对自己的理解不是很有信心。

create是一种更高级的 Flux 编程创建形式,适用于每轮多次发射,甚至可以从多个线程发射。


Yes, Flux.create https://github.com/reactor/reactor-core/blob/v3.2.0.RELEASE/reactor-core/src/main/java/reactor/core/publisher/Flux.java#L700产生一个SerializedSink https://github.com/reactor/reactor-core/blob/v3.2.0.RELEASE/reactor-core/src/main/java/reactor/core/publisher/FluxCreate.java#L93可以安全地从多个线程使用next calls

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同时从多个线程使用同一个 FluxSink 是否安全 的相关文章

随机推荐

  • 不同包中的类名相同

    同一类可以存在于多个包中吗 换句话说 我可以有Foo java上课于com test package1 and com test package2 Update 现在我从包 1 中复制了类并放入包 2 中 现在我正在创建该类的实例 我希望该
  • C# Regex.Split:删除空结果

    我正在开发一个应用程序 该应用程序导入数千行 其中每行的格式如下 9070183020 04 02 2011 107222 M S SUNNY MEDICOS GHAZIABAD 32 768 00 我正在使用以下Regex将行拆分为我需要
  • Apache2 Django NameError:名称“TypeError”未定义

    我试图通过 apache2 在 VPS 上运行 django 应用程序 但我在网站错误文件中收到以下内容 也是 400 错误请求 Exception ignored in
  • 可以使用 Python 标准库完成结构化日志记录吗?

    我最近读到了有关结构化日志记录的内容 here https stackify com what is structured logging and why developers need it 这个想法似乎不是通过将简单的字符串作为一行附加
  • Chromium 嵌入式框架:使用“ExecuteFunctionWithContext”时创建对象失败

    Overview 我在 Delphi 2009 上使用 chromium 嵌入式框架 cef 它是最新版本 Error 我可以用ExecuteFunctionWithContext成功执行 JavaScript 回调例程 我可以为其提供参数
  • 在 Glassfish 部署期间,WEB-INF/lib 中的 JAR 库未添加到类路径中

    尽管我已经使用 Java 几年了 但我还是 Glassfish 和 Java EE 的新手 我继承了一个停滞的项目 现在我需要重新开始开发 我正在尝试按原样部署 Web 应用程序 以查看哪些内容有效以及哪些内容需要注意 虽然实现各种功能的代
  • 如何防止(引导)固定顶部导航在移动设备上缩放

    在使用Bootstrap 3的固定顶部导航时 我注意到当用户在移动设备上使用原生缩放时 顶部导航也变得非常大 这会导致非常糟糕的用户体验 导航模糊了大部分内容并最终自行损坏 如以下示例所示 这个问题可以在网上看到http www explo
  • 如何暂停 android.speech.tts.TextToSpeech?

    我正在使用 Android TTS 播放文本 android speech tts TextToSpeech I use TextToSpeech speak说话和 stop停止 有没有办法也暂停文本 据我所知 TTS SDK 没有任何暂停
  • 如何仅修改react .map函数中的一个元素?

    我对反应有点陌生 并且对在这里做什么有点迷失 我正在从 firebase 加载数据并使用 map 函数渲染该对象的 props 以列出页面上的所有 评论 效果很好 我还想调用一个组件 该组件允许用户回复单个评论 即地图中的一个特定元素 但正
  • JPA:从属性创建 EntityManagerFactory

    我在 JAR 项目中使用 JPA 并使用 persistence xml 来设置我的 EntityManager 但由于 persistence xml 在构建后位于 JAR 内 因此用户随后更改设置非常复杂 因此 我正在寻找一种解决方案
  • C语言中数字之间插入空格

    我该如何获取像这样的数字123456并将其打印为1 2 3 4 5 6 最简单的方法 尽管不是最快的 可能是首先sprintf http linux die net man 3 sprintf将数字存入字符串缓冲区 然后循环遍历该缓冲区pr
  • 如何在 sbt 中有条件地调用任务?

    Say taskA是一项繁重的任务 只有在启用它并且taskAEnabled是对应的设置键 一个天真的方法是 val taskAConditional Def task taskAEnabled taskA map taskAEnabled
  • 为什么我的交叉表在 Excel 中被切断?

    我正在尝试使用 BIRT 创建 Excel 电子表格 该电子表格是将两个对象映射在一起的交叉表 行数和列数是根据 MySQL 数据库中的值动态变化的 目前我已经实现了 PDF 输出报告 现在 我正在尝试创建 Excel 报告的第二个版本 我
  • 使用 Rails 3.1.0 和 ubuntu 安装 Nokogiri 1.5.0 时出错

    这是在服务器上运行捆绑安装供应商 宝石时出现的错误 Installing nokogiri 1 5 0 with native extensions Gem Installer ExtensionBuildError ERROR Faile
  • 如何防止maven检查外部存储库?

    当我使用 Maven 构建时 我看到它检查所有类型的外部存储库中是否有只有我的本地构建应该生成的工件 我如何告诉它 com myorg 组只能在本地存储库中找到 基本上我想做 m2eclipse 对工作空间分辨率所做的事情 但在命令行上 I
  • 以编程方式更改导航标题

    我有一个带有标题的导航栏 当我双击文本对其进行重命名时 它实际上说它是一个导航项 所以可能就是这样 我正在尝试使用代码更改文本 例如 declare navigation bar as navagationbar here button s
  • 将多个 OSGi 包打包在同一个 jar 中

    我对 OSGi 平台非常陌生 拥有 OSGi 捆绑包B1依赖于另一个包B2 这很可能不是由容器提供的 我可以将两个包打包在同一个包中吗jar 如果是 该怎么做 如果jar已安装并且捆绑包已安装 是的 你可以这样做 有点 通常 OSGi 包是
  • 使用 AngularJS ui-grid $scope.saveRow 保存行数据

    我正在开发一个小型前端应用程序 它将在用户界面网格中显示各种产品运输数据 我有以下代码 HTML p row name works at row company p
  • 向 C# 添加“lazy”关键字时出现的问题

    我很想写这样的代码 class Zebra public lazy int StripeCount get return ExpensiveCountingMethodThatReallyOnlyNeedsToBeRunOnce 编辑 为什
  • 同时从多个线程使用同一个 FluxSink 是否安全

    我认识一个Publisher不得同时发布 但如果我使用Flux create FluxSink 我可以安全地打电话吗FluxSink next同时 换句话说 Spring 是否具有内部魔力来确保事件的正确串行发布 即使FluxSink ne