我发现了一种很难的方法,即JVM仅使用一个线程池来并行处理流。我们在大型流上具有I / O阻止功能,这导致与无关并行流一起使用的无关功能和快速功能引起活动性问题。
流上没有允许使用备用线程池的方法。
有没有一种简单的方法来避免此问题,也许以某种方式指定要使用的线程池?
最佳答案
我编写了一个名为StreamEx的小型库,该库可以将任务提交给自定义FJP。所以你可以写
ForkJoinPool forkJoinPool = new ForkJoinPool(2);
int[] primes = IntStreamEx.range(1, 1_000_000)
.parallel(forkJoinPool)
.filter(PrimesPrint::isPrime).toArray();
它只是简单地记住您的池,并在池中启动终端操作以加入结果。只是上述解决方案的语法糖。
关于parallel-processing - 流处理线程池耗尽,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27584271/