小编Mic*_*elM的帖子

parallelStream 中的线程大小大于 CPU 内核

默认情况下,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

3
推荐指数
1
解决办法
297
查看次数

标签 统计

java ×1