并行stream流使用注意

并行stream流使用注意

​ 今天项目中有个地方需要并发调用别的接口,同事推荐我用 stream 的 parallel 流去进行并行操作,使用起来确实很简单,但是使用 stream 的 parallel 流 项目所有流操作都是共享该池,当频繁的用于阻塞型任务(IO流:http请求等)时会导致整个项目卡顿,所以说parallelStream只适用于cpu密集型的任务。

1
2
3
4
5
6
7
8
9
10
11
ForkJoinPool forkJoinPool = new ForkJoinPool(3);
forkJoinPool.submit(() -> {
Stream.of(firstRange).parallel().forEach((number) -> {
try {
System.out.println("任务1的线程:" + Thread.currentThread().getName());
// do something slow
Thread.sleep(5000);
} catch (InterruptedException e) {
}
});
});

这样指定的话就没问题了,不过最后还是使用了 CompletableFuture 配合自定义线程池去使用,主要是 CompletableFuture 更灵活哈哈哈哈哈😏


并行stream流使用注意
http://xxpain.github.io/2021/08/19/parallel/
作者
无情小肥羊
发布于
2021年8月19日
许可协议