与迭代器创建的流的并行性

2023-12-31

在对流进行实验时,我遇到了以下我不太理解的行为。我从迭代器创建了一个并行流,我注意到它似乎没有表现出并行性。在下面的示例中,我在控制台上打印了两个并行流的计数器,一个是从迭代器创建的,另一个是从列表创建的。从列表创建的流表现出了我预期的行为,即以非顺序顺序打印计数器,但从迭代器创建的流以顺序打印计数器。我是否错误地从迭代器创建并行流?

    private static int counter = 0;

public static void main(String[] args) {
    List<Integer> lstr = IntStream.rangeClosed(1, 100).boxed().collect(Collectors.toList());
    Iterator<Integer> iter = lstr.iterator();

    System.out.println("Iterator Stream: ");
    StreamSupport.stream(Spliterators.spliteratorUnknownSize(iter, Spliterator.IMMUTABLE | Spliterator.CONCURRENT), true).forEach(i -> {
        System.out.print(counter + " ");
        counter++;
    });

    counter = 0;
    System.out.println("\nList Stream: ");
    lstr.parallelStream().forEach(i -> {
        System.out.print(counter + " ");
        counter++;
    });

}

不保证并行处理以非连续顺序打印计数器。此外,由于您在没有同步的情况下更新变量,因此可能会错过其他线程所做的更新,因此结果可能完全不一致。

除此之外,还有一个Iterator必须按顺序轮询,因此为了从并行处理中至少获得一些收益,必须缓冲元素,但如果没有已知的大小,则无法很好地估计要缓冲的元素数量。默认策略使用超过一千个元素,并且不能很好地分割工作。

因此,如果您使用超过一千个元素,您可能会注意到更多的并行活动。或者,您可以使用指定尺寸StreamSupport.stream(Spliterators.spliterator(iter, lstr.size(), 0), true)来构造流。然后,将调整内部使用的缓冲。

尽管如此,List的流将具有更高效的并行处理,因为它不仅知道其大小,而且支持利用底层数据结构的随机访问性质分割工作负载。

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

与迭代器创建的流的并行性 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will

随机推荐

  • SwiftUI 中根据文本高度自动调整视图高度

    我正在尝试在 SwiftUI 中创建一个视图 其中左侧图像的背景应根据右侧文本的高度垂直缩放 我尝试了很多不同的方法 从GeometryReader to layoutPriority 但我还没有设法让它们中的任何一个工作 当前状态 期望的
  • 向服务器发送 http 请求而不期待响应

    我需要向服务器发送 POST http 请求 但它不应该期待响应 我应该使用什么方法呢 我一直在使用 WebRequest request2 WebRequest Create http local ape project org 6969
  • 如何显示事务隔离级别(MySQL)

    我想知道当前Mysql数据库设置的隔离级别是什么 怎么才能查出来呢 我尝试在谷歌上搜索但没有找到 检查会话事务级别 mysql8 SELECT transaction ISOLATION 检查全局事务级别 mysql8 SELECT glo
  • IO 绑定操作的并行执行

    我已从头到尾阅读了 TPL 和任务库文档 但是 我仍然无法非常清楚地理解以下案例 现在我需要实现它 我将简化我的情况 我有一个IEnumerable
  • Java - 为什么将数组声明为接口类型?

    这是马克 韦斯教授在他的书中说的Java数据结构与算法分析 public class BinaryHeap
  • 如何使用pymssql获取sql打印消息

    我正在运行一些查询 从其执行中打印运行时统计信息 这是通过完成的print message 在sql脚本中使用 我希望在通过 pymssql 调用过程 脚本时看到这些消息 conn pymssql connect server user p
  • Django 中大表的内存效率(恒定)和速度优化迭代

    我有一张非常大的桌子 它当前位于 MySQL 数据库中 我用的是Django 我需要迭代each表的元素来预先计算一些特定的数据 也许如果我更好的话我可以这样做 但这不是重点 我希望在不断使用内存的情况下尽可能快地保持迭代 因为它已经明确地
  • 如何使用 PHP 获取午夜之前的小时数

    设想 一条记录已输入数据库 我试图找出以下方程 如何获取自添加记录以来的小时数 如何获取自记录以来到午夜还剩多少小时 加入 鉴于这些时间 日期 时间 2012 08 22 20 11 20 时间戳 1345684280 今晚午夜 2012
  • 如何允许用户更改列表框顺序

    我正在寻求帮助 我有两个列表 它们都将数据添加到同一个列表框中 并将它们显示为摘要 我想知道如何让用户在列表框中向上或向下移动索引 项目已添加到此处 private void BtnAddpickup Click object sender
  • 如何将时区全名翻译为 tz 缩写?

    在 Rails 3 x 应用程序中 我需要显示时区缩写 EST PST CST 等 而不是完整的时区名称 我见过许多似乎解决这个问题的讨论 但方式过于冗长 是否有一个 gem 或一个非常简洁的方法来处理这个问题 可以用来正确地映射它们 对于
  • Django 模板 datetime.weekday 名称

    有没有办法将模板中日期时间对象的工作日显示为工作日的实际名称 基本上我想要它打印Friday代替5 请参阅文档内置date filter https docs djangoproject com en dev ref templates b
  • SwiftUI 验证文本字段中的输入

    我试图通过使用正则表达式删除某些字符来验证文本字段中的用户输入 不幸的是 我遇到了 didSet 方法的问题textvar 递归调用自身 import SwiftUI import Combine class TextValidator O
  • 创建对对象的引用

    QuestionR 是否包含对象引用的概念 在Python中 等于运算符实际上是通过引用进行复制 例如 gt gt a 1 2 3 gt gt b a gt gt b 1 10 gt gt a 1 10 3 或在 C 中 vector a
  • 如果 R 中满足条件,则将多列中的值替换为 NA

    如果满足条件 我尝试将多个列中的值替换为 NA 这是一个示例数据集 library tidyverse sample lt tibble id 1 6 team score 5 10 cent dept test agg c 1 2 3 4
  • 如何更改 Jest 中模拟模块中函数的模拟实现

    我有一个看起来像这样的 utils 文件 utils js const getNextDate startDate gt moment startDate MMM Do YYYY startOf day add 10 days format
  • Jquery 附加内容 - 不可点击

    我有以下JQ 它基本上是添加一个小图标 允许在选择列表项时进行一些内联 编辑 但是 我无法使用 jquery 添加的内容 当我单击 JQ 添加的内容时 我什至无法将任何内容记录到控制台 我下面的代码有问题吗 我无法添加小提琴 因为我没有此列
  • 如何让WorkManager始终在后台运行

    我如何让 WorkManager 始终在后台运行 无论应用程序是否关闭 终止 打开 它都应该始终运行 我已经编码了doWork检查数据库中的更改并在数据库发生更改时发送通知的方法 因此 它应该始终在 bg 中运行以检查更改 那么我应该用什么
  • 在nodejs中使用for windows的forever模块

    我从以下链接下载了forever模块 https github com nodejitsu forever https github com nodejitsu forever 我提取了 zip 文件并将其放置在我的 node module
  • 可以将参数传递给 WPF 用户控件吗?

    可以将值或参数传递给 WPF 用户控件吗 我正在使用 MVVM 模式
  • 与迭代器创建的流的并行性

    在对流进行实验时 我遇到了以下我不太理解的行为 我从迭代器创建了一个并行流 我注意到它似乎没有表现出并行性 在下面的示例中 我在控制台上打印了两个并行流的计数器 一个是从迭代器创建的 另一个是从列表创建的 从列表创建的流表现出了我预期的行为