阅读Java8的并行流API:https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
还不清楚在使用这个流式API的并行性时,如何调优要使用的线程数?
计划在一个非常特定的机器类型和一致的数据类型上运行它,所以我想我可以在一组不同的设置上对它进行基准测试,然后使用最佳数量的线程。
流API不支持任何优化参数。该库被设计成尽可能有效地工作,而不考虑特定机器的特性。
是否可以为Java8并行流指定自定义线程池?我到处都找不到它。 如果我不能为不同的模块使用不同的线程池,这就意味着我不能在大多数真实世界的情况下安全地使用并行流。 请尝试以下示例。有些CPU密集型任务在单独的线程中执行。这些任务利用并行流。第一个任务被打破,因此每一步需要1秒(通过线程Hibernate模拟)。问题是其他线程会被卡住,等待中断的任务完成。这是一个虚构的示例,但假设一个servlet
将并行流执行提交到您自己的forkJoinpool:yourfjp.submit(()->stream.parallel().foreach(doSomething)); 所以,我这样做了: 我创建了一组线程名,以查看创建了多少线程,并记录了池中活动线程的数量,这两个数字都不超过16,所以这意味着这里的并行度不超过16(为什么甚至是16?)。如果我不使用forkJoinPool,我得到4作为并行度
我正在使用最新的Java8 lambdas和并行流处理数据。我的代码如下: 流以一个元素开始,但在第二阶段会添加更多的元素。我的假设是这个流应该并行运行,但在这种情况下只使用一个工作线程。 如果我从2个元素开始(即我在初始列表中添加第二个元素),那么就会产生2个线程来处理流,依此类推...如果我没有显式地将流提交给ForkJoinPool,也会发生这种情况。 问题是:它是记录在案的行为还是可能在实
它们之间有什么相同和不同之处,看起来Java并行流中有RXJava中可用的一些元素,是吗?
我认为流API在这里是为了使代码更易于阅读。我觉得有点烦。流接口扩展了java。lang.AutoCloseable接口。 因此,如果你想正确地关闭流,你必须使用try-with资源。 清单1.不是很好,流没有关闭。 清单2.使用2嵌套try 清单3。当map返回流时,必须关闭stream()和map()函数。 我举的例子毫无意义。为了示例,我将jpg图像的路径替换为整数。但不要让这些细节分散你的