小编jen*_*ros的帖子

Java parallelStream 不使用预期的线程数

Java 8 parallelStream 似乎使用了比系统属性java.util.concurrent.ForkJoinPool.common.parallelism指定的线程更多的线程。这些单元测试表明,我使用自己的 ForkJoinPool 使用所需数量的线程处理任务,但是当使用 parallelStream 时,线程数量高于预期。

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

import static org.junit.Assert.assertTrue;

public class ParallelStreamTest {

    private static final int TOTAL_TASKS = 1000;

    @Test
    public void testParallelStreamWithParallelism1() throws InterruptedException {
        final Integer maxThreads = 1;
        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", maxThreads.toString());
        List<Integer> objects = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            objects.add(i);
        }

        final AtomicInteger concurrentThreads = new AtomicInteger(0);
        final AtomicInteger taskCount = new AtomicInteger(0);

        objects.parallelStream().forEach(i …
Run Code Online (Sandbox Code Playgroud)

java multithreading java-8 java-stream

4
推荐指数
1
解决办法
4559
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

multithreading ×1