首页>Program>source

这是我对

  • 该实现负责提供找到了一种使用方法一个具有Stream框架并行执行功能的自定义线程池,我一生无法在Java 8 API中提及默认的Java 8并行Stream实现将使用Collection#parallelStream()StreamSupport类,以及我不知道的API中其他可能启用并行的流的来源。

    只有一些我可以从搜索结果中看到的花絮:


    So my question is:

    在哪里说ForkJoinPool#commonPool()用于对从Java 8 API获得的流进行并行操作吗?

  • 最新回答
    • 2天前
      1 #

      W.r.t. where is it documented that Java 8 parallel streams use FJ Framework?

      Afaik(Java 1.8u5)在并行流的JavaDoc中没有提到使用通用的ForkJoinPool。

      但是ForkJoin文档底部提到了它 http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

      W.r.t. replacing the Thread pool

      我的理解是,您可以使用自定义的ForkJoinPool(而不是常用的) -请参阅Java 8并行流中的自定义线程池-但没有与ForkJoin实现不同的自定义ThreadPool(我在这里有一个开放的问题:如何(全局)替换Java并行流的公共线程池后端?)< / p>

      W.r.t. replacing the Streams api

      您可以签出https://github.com/nurkiewicz/LazySeq,它更像是Scala的流实现-非常好,非常有趣

      PS(不包含ForkJoin和Streams)

      如果您有兴趣,我想指出,我偶然发现了一些有关FJ池使用的问题,例如,

        Nested Java 8 parallel forEach loop perform poor. Is this behavior expected?

        Using a semaphore inside a nested Java 8 parallel stream action may DEADLOCK. Is this a bug?

      p

      就其value而言,《 Java 8 in Action》有一章介绍了并行数据处理和性能(第7章).它说:

      "...the Stream interface gives you the opportunity to execute operations in parallel on a collection of data without much effort."

      "...you’ll see how Java can make this magic happen or, more practically, how parallel streams work under the hood by employing the fork/join framework introduced in Java 7."

      在7.1节中也有一个小注释:

      "Parallel streams internally use the default ForkJoinPool...which by default has as many threads as you have processors, as returned by Runtime.getRuntime().availableProcessors(). "

      ",您可以使用系统属性java.util更改此池的大小 .concurrent.ForkJoinPool.common.parallelism,如以下示例所示:"

      System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","12");

      如评论和其他答案中所述,这并不意味着它将始终使用fork / join。

    • 2天前
      2 #

      您可以在GrepCode上检查终端操作的源代码.例如,让我们看一下ForEachOp.如您所见,ForEachOp的validateParallel方法创建并调用了ForEachTask对象,该对象派生自从ForkJoinTask派生的CountedCompleter。

  • python:conda命令将提示错误:"错误的解释器:没有这样的文件或目录"
  • c#:检查是否选择了特定的标签页(活动)