<分区>
我正在使用 java 8 的并行流,但我不明白一件事:
我有一台有 8 个处理器的机器......
IntStream.range(0, 9).parallel().forEach(i -> {
int cnt = 0;
while (System.currentTimeMillis() < runUntil)
cnt++;
System.out.println(i + ": " + cnt);
})
这是否意味着我只能使用 8 个线程?
上面的代码并行运行 8 个,下一个将等待,但如果我使用使用 ForkJoinPool
的自定义线程池,则 8 个以上的任务将并行运行。
ForkJoinPool forkJoinPool = new ForkJoinPool(17);
forkJoinPool.submit(()->IntStream.range(0, 17).parallel().forEach(i ->
{
int cnt = 0;
while(System.currentTimeMillis() < runUntil)
cnt++;
System.out.println(i + ": " + cnt);
})).get();
上面的代码只并行运行了16个。如果我可以在 8 处理器机器上使用超过 8 个线程,我可以使用的最大线程数是多少。
编辑 1 - 这是否意味着我们可以使用的最大线程数是 2* 可用处理器的?