自定义parallelStream的thread pool

简介: 自定义parallelStream的thread pool

目录



自定义parallelStream的thread pool


简介


之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的,默认情况下ForkJoinPool为每一个处理器创建一个线程,parallelStream如果没有特别指明的情况下,都会使用这个共享线程池来提交任务。


那么在特定的情况下,我们想使用自定义的ForkJoinPool该怎么处理呢?


通常操作


假如我们想做一个从1到1000的加法,我们可以用并行stream这样做:


List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());
        ForkJoinPool customThreadPool = new ForkJoinPool(4);
        Integer total= integerList.parallelStream().reduce(0, Integer::sum);
        log.info("{}",total);


输出结果:


INFO com.flydean.CustThreadPool - 499500


使用自定义ForkJoinPool


上面的例子使用的共享的thread pool。 我们看下怎么使用自定义的thread pool来提交并行stream:


List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());
ForkJoinPool customThreadPool = new ForkJoinPool(4);
        Integer actualTotal = customThreadPool.submit(
                () -> integerList.parallelStream().reduce(0, Integer::sum)).get();
        log.info("{}",actualTotal);


上面的例子中,我们定义了一个4个线程的ForkJoinPool,并使用它来提交了这个parallelStream。


输出结果:


INFO com.flydean.CustThreadPool - 499500


总结


如果不想使用公共的线程池,则可以使用自定义的ForkJoinPool来提交。


本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-cust-threadpool

相关文章
|
6月前
|
消息中间件 算法 物联网
RT-Thread快速入门-初探RT-Thread
RT-Thread快速入门-初探RT-Thread
111 0
RT-Thread线程创建和删除
RT-Thread线程创建和删除
144 0
|
设计模式 Java 数据库
对象池模式(Object Pool Pattern)
对象池模式(Object Pool Pattern),是创建型设计模式的一种,将对象预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少频繁创建对象所占用的内存空间和初始化时间。
86 0
|
调度
线程 --- Thread 类的基本用法 old
线程 --- Thread 类的基本用法 old
135 0
线程 --- Thread 类的基本用法 old
|
消息中间件 存储 传感器
RT-Thread记录(八、理解 RT-Thread 内存管理)
RT-Thread内核的我们已经基本都学习过了,除了基本的线程操作和通信, 内核部分还有内存管理和中断处理,本文主要就来说说内存管理相关问题。
370 0
RT-Thread记录(八、理解 RT-Thread 内存管理)
|
Java 调度 API
java之Thread.sleep(long)与object.wait()/object.wait(long)的区别及相关概念梳理(good)
一、Thread.sleep(long)与object.wait()/object.wait(long)的区别sleep(long)与wait()/wait(long)行为上有些类似,主要区别如下:1.Thread.sleep(long)是属于Thread类的静态方法。
1370 0
|
Java
Thread.join与ThreadPool
1、Thread.join()    使用此方法先阻塞调用Thread的线程,确保线程Thread正常终止。     如果线程不终止,则调用方将无限期阻塞。如果调用 Join 时该线程已终止,此方法将立即返回。
1548 0
|
Java
Thread的join方法原理
今天没什么要说的。我个人很喜欢拍天空的照片,放一张前段时间晚上拍的照片吧。
318 0
|
人工智能 JavaScript 新能源
RT-Thread 中的多线程
RT-Thread 中的多线程
311 0
RT-Thread 中的多线程