我设置了一个 ForkJoinPool 来使用我一半的 CPU,如下所示:
ForkJoinPool forkJoinPool = new ForkJoinPool(
Runtime.getRuntime().availableProcessors() / 2);
但是,当我提交诸如那里描述的合并排序之类的作业时,该池正在使用我机器 CPU 的 80+%。
这是预期的吗?如果是这样,有没有办法有效地限制工作线程的数量?
我设置了一个 ForkJoinPool 来使用我一半的 CPU,如下所示:
ForkJoinPool forkJoinPool = new ForkJoinPool(
Runtime.getRuntime().availableProcessors() / 2);
但是,当我提交诸如那里描述的合并排序之类的作业时,该池正在使用我机器 CPU 的 80+%。
这是预期的吗?如果是这样,有没有办法有效地限制工作线程的数量?
过多的线程问题可以追溯到早期的 Java7。您没有指定您使用的是哪个版本,但无论如何,Java7 和 Java8 都存在线程过多的类似问题。Java8u40 解决了嵌套调用中的一些过度问题,但代价是过度旋转。
自 2011 年以来,我一直在撰写对该框架的持续批评。Java8 的文章在这里有指向其中第一篇 (Java7) 和 8u40 文章的链接。
具体回答您的问题:没有办法限制使用此框架使用工作线程。