自定义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月前
|
存储 前端开发 算法
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(一)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
212 0
|
6月前
|
存储 并行计算 Java
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(二)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
244 0
|
6月前
|
消息中间件 算法 物联网
RT-Thread快速入门-初探RT-Thread
RT-Thread快速入门-初探RT-Thread
101 0
|
Java 调度
Thread常用方法
Thread常用方法
59 0
|
设计模式 Java 数据库
对象池模式(Object Pool Pattern)
对象池模式(Object Pool Pattern),是创建型设计模式的一种,将对象预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少频繁创建对象所占用的内存空间和初始化时间。
82 0
|
NoSQL Java Linux
Jedis异常Could not get a resource from the pool
Jedis异常Could not get a resource from the pool
674 0
|
消息中间件 存储 传感器
RT-Thread记录(八、理解 RT-Thread 内存管理)
RT-Thread内核的我们已经基本都学习过了,除了基本的线程操作和通信, 内核部分还有内存管理和中断处理,本文主要就来说说内存管理相关问题。
361 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类的静态方法。
1368 0
|
JavaScript Apache 前端开发
Apache的commons-pool池创建多线程使用WebClient
package test; import org.apache.commons.pool.PoolableObjectFactory; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.log4j.Logger; import com.gargoylesoftware.htmlunit.Brow
2401 0
|
Java
Thread.join与ThreadPool
1、Thread.join()    使用此方法先阻塞调用Thread的线程,确保线程Thread正常终止。     如果线程不终止,则调用方将无限期阻塞。如果调用 Join 时该线程已终止,此方法将立即返回。
1545 0