ForkJoinPool使用的CPU比指定的多

时间:2015-04-13 15:40:14

标签: java fork-join forkjoinpool

我设置了一个ForkJoinPool来使用我的一半CPU:

ForkJoinPool forkJoinPool = new ForkJoinPool(
        Runtime.getRuntime().availableProcessors() / 2);

但是,当我提交诸如there所述的合并排序之类的作业时,该池最多使用80%以上的机器CPU。

这是预期的吗?如果是这样,有没有办法有效地限制工作线程的数量?

1 个答案:

答案 0 :(得分:1)

过多的线程问题可以追溯到早期的Java7。您没有指定您正在使用的版本,但无论如何,Java7和Java8都存在类似的过多线程问题。 Java8u40解决了嵌套调用中的一些过多问题,但代价是过度旋转。

自2011年以来,我一直在撰写对此框架的持续批评.Java8的文章是here其中有第一篇(Java7)和8u40文章的链接。

专门回答您的问题:没有办法限制使用此框架的工作线程。