Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ForkJoinPool线程限制还是Java流替代方案?_Java_Java Stream - Fatal编程技术网

Java ForkJoinPool线程限制还是Java流替代方案?

Java ForkJoinPool线程限制还是Java流替代方案?,java,java-stream,Java,Java Stream,我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率。 由于java流功能接口(如map、reduce、filter)和ForkJoinPool的完美结合,我使用java并行流和ForkJoinPool 问题是ForkJoin没有限制活动线程的数量。 如果某些线程在占用大内存时被阻塞,ForkJoinPool将尝试创建更多线程以满足并行性(运行线程) 在这种情况下,cpu利用率将最大化,但堆内存将耗尽甚至耗尽 如何限制ForkJoinPool的

我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率。 由于java流功能接口(如map、reduce、filter)和ForkJoinPool的完美结合,我使用java并行流和ForkJoinPool

问题是ForkJoin没有限制活动线程的数量。 如果某些线程在占用大内存时被阻塞,ForkJoinPool将尝试创建更多线程以满足并行性(运行线程)

在这种情况下,cpu利用率将最大化,但堆内存将耗尽甚至耗尽

如何限制ForkJoinPool的活动线程数

或者有没有java流接口的替代方案

我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率

这并不完全是目标。它可能具有最大化CPU利用率的效果,但是的目标是加快计算速度。这不是一回事

如何限制ForkJoinPool的活动线程数

根据这一点,防止forkjoin线程池在病态情况下爆炸的一种方法是提供一个定制的
ForkJoinThreadFactory
,它跟踪现有线程的数量(不知何故),并在已经存在太多线程时返回
null

请注意,如果您确实达到了限制(由您的工厂规定),您将在提交任务时收到
拒绝执行异常
s


或者有没有java流接口的替代方案

我不知道有一个

但是我不相信在正常使用
Stream.parallelStream()
时会遇到这个问题

如果您确实遇到这种情况,并且拒绝执行是有问题的,那么您可能需要寻找另一种方式来表示计算;e、 g.使用协程而不是线程,或者使用工作队列和执行器,或者其他我没有想到的东西:-)