java设置并行度_控制Java并行流的并行度

java设置并行度

在掌握了这些新功能之后,随着Java 9的最新发布,我们有了许多新功能可以用来改进我们的解决方案。 Java 9的发布也是修改我们是否掌握Java 8功能的好时机。

在这篇文章中,我想解决关于Java并行流的最常见的误解。 人们通常说您不能以编程方式控制并行流的并行度,并行流始终在共享的ForkJoinPool.commonPool()上运行,您对此无能为力。 如果仅通过将parallel()调用添加到调用链来使流并行,就属于这种情况。 在某些情况下,这可能就足够了,例如,如果您仅对该流执行轻量级操作,但是,如果您需要对流的并行执行获得更多控制,则您需要做的不仅仅是调用parallel()。

让我们直接跳入自记录示例,而不是深入研究理论和技术。

在共享的ForkJoinPool.commonPool()上处理并行流:

Set<FormattedMessage> formatMessages(Set<RawMessage> messages) {return messages.stream().parallel().map(MessageFormatter::format).collect(toSet());
}

让我们将并行处理移到我们可以控制且不必共享的池中:

private static final int PARALLELISM_LEVEL = 8;Set<FormattedMessage> formatMessages(Set<RawMessage> messages) {ForkJoinPool forkJoinPool = new ForkJoinPool(PARALLELISM_LEVEL);try {return forkJoinPool.submit(() -> formatMessagesInParallel(messages)).get();} catch (InterruptedException | ExecutionException e) {// handle exceptions} finally {forkJoinPool.shutdown();}
}private Set<FormattedMessage> formatMessagesInParallel(Set<RawMessage> messages) {return messages.stream().parallel().map(MessageFormatter::format).collect(toSet());
}

在此示例中,我们仅对ForkJoinPool的并行性级别感兴趣,尽管如果需要,我们也可以控制ThreadFactory和UncaughtExceptionHandler。

ForkJoinPool调度程序将在后台进行所有工作,包括合并工作窃取算法以提高并行处理效率。 值得一提的是,在某些情况下,例如,如果工作负载均匀地分布在工作线程上,使用ThreadPoolExecutor进行手动处理可能会更高效。

翻译自: https://www.javacodegeeks.com/2017/11/controlling-parallelism-level-java-parallel-streams.html

java设置并行度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink读取不到文件_日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践...

简介&#xff1a; 友信金服公司推行全域的数据体系战略&#xff0c;通过打通和整合集团各个业务线数据&#xff0c;利用大数据、人工智能等技术构建统一的数据资产&#xff0c;如 ID-Mapping、用户标签等。友信金服用户画像项目正是以此为背景成立&#xff0c;旨在实现“数据驱…

MySQL 如何将数据表中字符串类型的字段值中的部分字符串替换掉(字符串替换/字符串拼接/生成 SQL 脚本语句)

使用拼接函数(concat)生成更新某字段值的 SQL 脚本语句 一、生成更新字段 logo 的 SQL 脚本语句如下: select concat( update tf_company set logo=, replace(logo,http://www.dpqyw.com:80,http://www.dpqyw.com), ,where company_id=,company_id,

apache pulsar_Apache Pulsar:分布式Pub-Sub消息系统

apache pulsarApache Pulsar是一个开源的分布式pub-sub消息传递系统&#xff0c;最初是由Yahoo创建的&#xff0c;并且是Apache Software Foundation的一部分 。 Pulsar是用于服务器到服务器消息传递的多租户高性能解决方案。 脉冲星的主要功能包括[4]&#xff1a; 对Pulsar…

python deque索引超出范围_Python基础语法

学习Python的四个要素有数据&#xff0c;函数&#xff0c;条件循环和模块一、数据数据是Python编程过程中的原材料&#xff0c;通过导入数据&#xff0c;对数据进行操作&#xff0c;实现预先设想的功能。数据共有5种类型&#xff0c;分别是字符串、数字、容器、布尔值和空值。字…

Path环境变量的理解以及设置MinGW环境变量

配置path环境变量 在使用MinGW的时候&#xff0c;不小心把path变量的东西全部删掉了&#xff0c;结果只能自己重新设置path变量&#xff0c;首先要知道如何设置path变量。 Path路径&#xff1a;用来指定可执行文件的搜索路径&#xff0c;也就是后缀名为.exe文件&#xff0c;方…

写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

写java代码时的注意事项Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一。 尽管我喜欢这个新的Java类的东西比不喜欢的东西多&#xff0c;但在Java方法中将其用作return类型时&#xff0c;需要考虑一些事情。 我将在本文中讨论其中的一些问题&#xff0c;但不…

Linux 命令之 iconv -- 转换文件的字符编码

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;对指定文件进行转码&#xff0c;且输出到指定的文件中一、命令介绍 iconv 命令是 Linux 系统自带的用于转换文件编码的命令行工具&#xff0c;iconv 命令用来转换文件的编码方式&#xff…

python asyncio future_Python asyncio.isfuture方法代码示例

本文整理汇总了Python中asyncio.isfuture方法的典型用法代码示例。如果您正苦于以下问题&#xff1a;Python asyncio.isfuture方法的具体用法&#xff1f;Python asyncio.isfuture怎么用&#xff1f;Python asyncio.isfuture使用的例子&#xff1f;那么恭喜您, 这里精选的方法代…

python爬取网站的图片

python爬取网站的图片 本次爬取图片所需要用到的库&#xff1a;Requests库&#xff0c;BeautifulSoup库&#xff0c;正则表达式&#xff0c;os库。 思路&#xff1a;先爬一张图片&#xff0c;再爬一个网站的图片 先爬一张图片&#xff1a; 首先要得到这张图片的地址&#x…

spring 定时器注释_带注释的控制器– Spring Web / Webflux和测试

spring 定时器注释Spring Webflux和Spring Web是两个完全不同的Web堆栈。 但是&#xff0c; Spring Webflux继续支持基于注释的编程模型 使用这两个堆栈定义的端点可能看起来很相似&#xff0c;但是测试这种端点的方式却完全不同&#xff0c;并且编写这种端点的用户必须知道哪…

python计算方位角_实例讲解:用python 计算方位角(根据两点的坐标计算)记得收藏哦...

今天为大家分享一篇python 计算方位角实例(根据两点的坐标计算)&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起来看看吧&#xff01;知道两点坐标&#xff0c;怎么计算两点方向的方位角&#xff1f;答&#xff1a;首先计算坐标增量dx&#xff0c;dy(两个…

Java 中的自举类,到底是什么?

欲知详情&#xff0c;猛戳&#xff1a;https://www.zhihu.com/question/447748200

数据库考研SQL操作

SQL的动词 SQL功能动词数据查询SELECT数据定义CREATE, DROP, ALTER数据操纵INSERT, UPDATE, DELETE数据控制GRANT, REVOKE 注&#xff1a;以下[ ]表示方括号的内容可要可不要&#xff0c;|表示或&#xff0c;//表示注释。 一、数据定义 1.CREATE 定义模式 CREATE SCHEMA &…

objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类

objects jdk8JDK 9向Objects类添加了一些新方法&#xff0c;包括本文中突出显示的两个static方法&#xff1a; requireNonNullElse&#xff08;T&#xff0c;T&#xff09;和requireNonNullElseGet&#xff08;T obj&#xff0c;Supplier <&#xff1f;extended T>供应商…

用户登陆_华为路由器AAA用户密码登陆你了解吗?

AAA Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;、Accounting&#xff08;&#xff09;它提供了认证、授权、计费三种安全功能,可以验证用户帐户是否合法&#xff0c;授权用户可以访问的服务&#xff0c;并记录用户使用网络资源的…

Java API 文档中的接口方法和抽象方法,有什么区别?

欲知详情&#xff0c;猛戳&#xff1a;https://www.zhihu.com/question/445956288

java程序设置jvm_Java程序员应在2018年学习的3种JVM语言

java程序设置jvm如果您是Java程序员&#xff0c;并且想学习更多的编程语言以扩展您的知识和技能&#xff0c;但是不确定选择哪种编程语言&#xff0c;那么您来对地方了。 在本文中&#xff0c;我将分享Java程序员可以在2018年学习的3种JVM语言以及为什么要学习它们。 成为多语种…

word域变成正常文本_【Word小技巧】不学会后悔哦~

工作中使用Word早已成了习惯&#xff0c;因此&#xff0c;今天小编将为大家分享几个实用的的Word小技巧。重叠字快速录入文字录入是word最基本操作&#xff0c;过程中我们难免要输入重叠字&#xff0c;例如&#xff1a;热热闹闹&#xff0c;卿卿我我等……你知道如何快速录入吗…

Java 中把声明变量的语句如果写在循环体内,每次执行时栈内存中的变量和数据是如何变化的?

问题一&#xff1a;如下面的代码示例 1&#xff0c;JVM 是不是会反复回收旧的变量 a 再重新创建新的变量 a 呢&#xff1f;还是旧的变量 a 一直保留在栈内&#xff0c;只是反复赋值 0 而已呢&#xff1f; 代码示例 1&#xff1a; while (true) { int a 0; a 5; }问题二&…

使用Speedment 3.0.17及更高版本简化了事务

交易次数 有时我们想确保我们的数据库操作是原子执行的&#xff0c;并且与其他操作分开。 这是交易起作用的地方。 交易是一组操作 数据库可能接受或不接受作为原子操作的建议。 因此&#xff0c;要么接受交易中的所有操作&#xff0c;要么不接受交易中的所有操作。 事务的另一…