嘉兴模板开发建站,网站开发多长时间,个人备案域名可以做企业网站吗,摄影网站的市场可行性在掌握了这些新功能之后#xff0c;随着Java 9的最新发布#xff0c;我们有了许多新功能可以用来改进我们的解决方案。 Java 9的发布也是修改我们是否掌握Java 8功能的好时机。 在本文中#xff0c;我想解决关于Java并行流的最常见的误解。 人们通常说您不能以编程方式控制… 在掌握了这些新功能之后随着Java 9的最新发布我们有了许多新功能可以用来改进我们的解决方案。 Java 9的发布也是修改我们是否掌握Java 8功能的好时机。 在本文中我想解决关于Java并行流的最常见的误解。 人们通常说您不能以编程方式控制并行流的并行度并行流始终在共享的ForkJoinPool.commonPool上运行您对此无能为力。 如果仅通过将parallel调用添加到调用链来使流并行就属于这种情况。 在某些情况下这可能就足够了例如如果您仅对该流执行轻量级操作但是如果您需要对流的并行执行获得更多控制则您需要做的不仅仅是调用parallel。 让我们直接跳入自记录示例而不是深入研究理论和技术。 在共享的ForkJoinPool.commonPool上处理并行流 SetFormattedMessage formatMessages(SetRawMessage messages) {return messages.stream().parallel().map(MessageFormatter::format).collect(toSet());
} 让我们将并行处理移到我们可以控制且不必共享的池中 private static final int PARALLELISM_LEVEL 8;SetFormattedMessage formatMessages(SetRawMessage messages) {ForkJoinPool forkJoinPool new ForkJoinPool(PARALLELISM_LEVEL);try {return forkJoinPool.submit(() - formatMessagesInParallel(messages)).get();} catch (InterruptedException | ExecutionException e) {// handle exceptions} finally {forkJoinPool.shutdown();}
}private SetFormattedMessage formatMessagesInParallel(SetRawMessage 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