首页 > 解决方案 > ParallelStream 和 Spring 异步

问题描述

我有一个包含大量数据的列表,我想对每个项目进行一些计算/逻辑。

它正在调用 spring Service 方法来执行逻辑。我有点困惑,哪一种是使用异步最快的正确方法。

现在我只是通过 parrallelStream 调用该方法,如下所示

items.getItems().parallelStream().forEach(item -> addItem(item));

但我仍然看到性能问题,它不完全是异步/快速的,我认为这是由于方法不是异步的,因为只有 1 个 bean 1 方法处理所有事情。

我想知道将异步添加到方法中是否会提高性能。或者这是正确的方法。如果我将异步添加到方法中,我应该只用流替换 parrallelStreams 吗?

或者有没有更好的方法来提高性能。

[编辑]

为了使问题更清楚,用户调用具有大列表的端点,我想对项目执行业务逻辑并返回更新的列表。

标签: javaspringmultithreadingasynchronous

解决方案


  1. 使用在单个项目上实现业务逻辑的方法创建一个单例 bean。
  2. 创建队列
  3. 创建一个 Spring Scheduler,它定期从队列中获取一项并异步运行 bean 来处理它。

一般来说,您应该更喜欢使用 Spring 功能进行异步计算而不是 java 功能。

如果列表很大,请不要忘记通常为 30 秒的 http 调用超时。

如果计算需要更长的时间,您的 REST API 应该接受该列表,创建一个任务并检索 http 状态 203_ACCEPTED 并在单独的线程中执行任务。


推荐阅读