Custom thread pool in Java 8 parallel stream

后端 未结 15 927
旧巷少年郎
旧巷少年郎 2020-11-22 00:15

Is it possible to specify a custom thread pool for Java 8 parallel stream? I can not find it anywhere.

Imagine that I have a server application and I would like to

15条回答
  •  花落未央
    2020-11-22 01:11

    The original solution (setting the ForkJoinPool common parallelism property) no longer works. Looking at the links in the original answer, an update which breaks this has been back ported to Java 8. As mentioned in the linked threads, this solution was not guaranteed to work forever. Based on that, the solution is the forkjoinpool.submit with .get solution discussed in the accepted answer. I think the backport fixes the unreliability of this solution also.

    ForkJoinPool fjpool = new ForkJoinPool(10);
    System.out.println("stream.parallel");
    IntStream range = IntStream.range(0, 20);
    fjpool.submit(() -> range.parallel()
            .forEach((int theInt) ->
            {
                try { Thread.sleep(100); } catch (Exception ignore) {}
                System.out.println(Thread.currentThread().getName() + " -- " + theInt);
            })).get();
    System.out.println("list.parallelStream");
    int [] array = IntStream.range(0, 20).toArray();
    List list = new ArrayList<>();
    for (int theInt: array)
    {
        list.add(theInt);
    }
    fjpool.submit(() -> list.parallelStream()
            .forEach((theInt) ->
            {
                try { Thread.sleep(100); } catch (Exception ignore) {}
                System.out.println(Thread.currentThread().getName() + " -- " + theInt);
            })).get();
    

提交回复
热议问题