默认情况下,parallelStream 中的 commonPool 的大小应该是cpu_cores - 1.
但是,在我的应用程序中,它总是大于硬件cpu_cores。
VisualVM 截图:
很困惑,我已经在互联网上搜索了一半,但找不到答案。
我的配置:
Runtime.getRuntime().availableProcessors()=12
java.util.concurrent.ForkJoinPool.common.parallelism=null(默认设置)
我的代码:
final CountDownLatch countDownLatch = new CountDownLatch(tempList.size());
tempList.parallelStream().forEach(om -> {
countDownLatch.countDown();
redisReBloomService.add(config.getRedisKey(), om.getChannelNo());
});
countDownLatch.await();
Run Code Online (Sandbox Code Playgroud)
另外,我尝试过自定义池设置,但它也不起作用-
ForkJoinPool forkJoinPool = new ForkJoinPool(3);
forkJoinPool.submit(() -> {
tempList.parallelStream().forEach(om -> {
countDownLatch.countDown();
redisReBloomService.add(config.getRedisKey(), om.getChannelNo());
}).get();
});
Run Code Online (Sandbox Code Playgroud)
一些信息:https : //docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html Java 8 并行流中的自定义线程池
java ×1