当前位置: 首页 > 知识库问答 >
问题:

使用Flux会丢失一些物品。Reactor中的push()

裴宏壮
2023-03-14

我的代码如下:

public class SequenceCreator {

    public Consumer<List<Integer>> consumer;

    public Flux<Integer> createNumberSequence() {
        return Flux.push(sink -> consumer = items -> items.forEach(sink::next));
    }

    public static void main(String[] args) throws InterruptedException {
        SequenceCreator sequenceCreator = new SequenceCreator();

        List<Integer> sequence1 = Lists.newArrayList(1,2,3,4,5);
        List<Integer> sequence2 = Lists.newArrayList(6,7,8,9,10);

        Thread producingThread1 = new Thread(
                () -> sequenceCreator.consumer.accept(sequence1));

        Thread producingThread2 = new Thread(
                () -> sequenceCreator.consumer.accept(sequence2));

        sequenceCreator.createNumberSequence().subscribe(System.out::println);

        producingThread1.start();
        producingThread2.start();

        while (true) {
            Thread.sleep(1000);
        }
    }
}

输出为

1 2 3 4 5 7 8 9 10

我不知道为什么数字6没有输出这是多线程的原因吗?

共有1个答案

范嘉
2023-03-14

我不知道为什么数字6没有输出这是多线程的原因吗?

是的,几乎可以肯定。看一下Javadoc forFlux。推送:

以编程方式创建Flux,该Flux能够通过FLuxSink API从单线程生产者发出多个元素。有关支持多线程的替代方案,请参阅创建(消费者)。

您没有使用单线程生产者(违反记录的要求),因此在这个场景中行为基本上是未定义的。您需要切换到通量。按照文档的建议创建,因为您使用多个线程来发布。

 类似资料:
  • 我有5,000,000插入查询在文件中。我想从文件中读取它们,并用java驱动程序和执行Async方法写入cassandra,在循环语句中,如以下代码: 我的表格定义是: 但运行程序后,表中的行数为2569725 我测试了10多次,每次选择计数(*)的结果都在2400,00到2600000之间

  • 我们为Spring网关编写了一个自定义谓词工厂来路由请求。我们正在解析XML请求的主体,然后根据主体中存在的特定方法派生路由。在此过程中,我们编写了以下代码来创建ServerRquest。 使用较旧版本的完美地运行此解决方案。但使用最新版本的我得到以下异常。网关应用程序正常启动,没有任何错误。 有没有其他人也有同样的问题,知道如何解决这个问题?

  • 我正在用SQS和JavaSDK发送和接收消息。几乎所有的消息都工作正常,但是其中一些丢失了,我不明白为什么。这是发送消息的代码: 以及接收代码(在循环中运行): 问题是,我能够接收到一些消息,但有些消息不是(总是相同类型的数据)。发送和接收的代码对于所有消息都是相同的。应用程序日志: 正在发送消息:{QueueUrl:https://sqs.us-east-1.amazonaws.com/0000

  • 我是WebFlux/Reactor的新手,很难考虑如何编写这段代码。基本上,我有一个流量,它有一个嵌套的List foo和一个mono bar,我只想在foo中返回bar中包含的项。 上面代码块的问题是上的,我不想阻止。不确定如何将其更改为无阻塞,但仍然检查bar是否包含烫发项。

  • 问题内容: 我已按照以下指示在Google App Engine应用程序中配置了JSF 2.1: https://sites.google.com/a/wildstartech.com/adventures-in-java/Java-Platform- Enterprise-Edition/JavaServer-Faces/javaserver-faces-21/configuring- java

  • 问题内容: 我有一个博客。在单个帖子页面上,我想显示指向上一个帖子的链接,如果有一个链接,则在底部发布下一个帖子。该链接应为特定帖子的标题。 我如何用猫鼬最简单的方式做到这一点? 我当前的控制器如下所示: 架构如下所示: 问题答案: 因此,假设您拥有这样的架构: 我想_id是mongo ObjectId,所以我们包含发布日期,我可以对其进行排序 让我们考虑一下,我已经打开了ID为的当前帖子(而不是