Java ForkJoinPool线程限制还是Java流替代方案?
我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率。 由于java流功能接口(如map、reduce、filter)和ForkJoinPool的完美结合,我使用java并行流和ForkJoinPool 问题是ForkJoin没有限制活动线程的数量。 如果某些线程在占用大内存时被阻塞,ForkJoinPool将尝试创建更多线程以满足并行性(运行线程) 在这种情况下,cpu利用率将最大化,但堆内存将耗尽甚至耗尽 如何限制ForkJoinPool的活动线程数 或者有没有java流接口的替代方案 我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率 这并不完全是目标。它可能具有最大化CPU利用率的效果,但是的目标是加快计算速度。这不是一回事 如何限制ForkJoinPool的活动线程数 根据这一点,防止forkjoin线程池在病态情况下爆炸的一种方法是提供一个定制的Java ForkJoinPool线程限制还是Java流替代方案?,java,java-stream,Java,Java Stream,我知道java parallelStream(或ForkJoinPool)旨在最大限度地提高CPU利用率。 由于java流功能接口(如map、reduce、filter)和ForkJoinPool的完美结合,我使用java并行流和ForkJoinPool 问题是ForkJoin没有限制活动线程的数量。 如果某些线程在占用大内存时被阻塞,ForkJoinPool将尝试创建更多线程以满足并行性(运行线程) 在这种情况下,cpu利用率将最大化,但堆内存将耗尽甚至耗尽 如何限制ForkJoinPool的
ForkJoinThreadFactory
,它跟踪现有线程的数量(不知何故),并在已经存在太多线程时返回null
请注意,如果您确实达到了限制(由您的工厂规定),您将在提交任务时收到拒绝执行异常
s
或者有没有java流接口的替代方案 我不知道有一个 但是我不相信在正常使用
Stream.parallelStream()
时会遇到这个问题
如果您确实遇到这种情况,并且拒绝执行是有问题的,那么您可能需要寻找另一种方式来表示计算;e、 g.使用协程而不是线程,或者使用工作队列和执行器,或者其他我没有想到的东西:-)