我在使用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*可用处理器的线程?