Java8并行流中自定义线程池操作示例

所属分类: 软件编程 / java 阅读数: 27
收藏 0 赞 0 分享

本文实例讲述了Java8并行流中自定义线程池操作。分享给大家供大家参考,具体如下:

1.概览

java8引入了流的概念,流是作为一种对数据执行大量操作的有效方式。并行流可以被包含于支持并发的环境中。这些流可以提高执行性能-以牺牲多线程的开销为代价

在这篇短文中,我们将看一下 Stream API的最大限制,同时看一下如何让并行流和线程池实例(ThreadPool instance)一起工作。

2.并行流Parallel Stream

我们先以一个简单的例子来开始-在任一个Collection类型上调用parallelStream方法-它将返回一个可能的并行流。

@Test
publicvoidgivenList_whenCallingParallelStream_shouldBeParallelStream(){
  List aList = newArrayList<>();
  Stream parallelStream = aList.parallelStream();
  assertTrue(parallelStream.isParallel());
}

这样的流的默认处理流程是使用ForkJoinPool.commonPool(),这是一个被整个应用程序所共享的线程池。

3.自定义线程池

在处理流的时候,我们可以传递自定义一个线程池。下面的例子中,我们有一个并行流,这个并行流使用了一个自定义的线程池去计算1到 1,000,000的和:

@Testpublic void giveRangeOfLongs_whenSummedInParallel_shouldBeEqualToExpectedTotal() throws InterruptedException, ExecutionException { long firstNum = 1; long lastNum = 1_000_000; List aList = LongStream.rangeClosed(firstNum, lastNum).boxed()
   .collect(Collectors.toList());
  ForkJoinPool customThreadPool = new ForkJoinPool(4);
  long actualTotal = customThreadPool.submit(
   () -> aList.parallelStream().reduce(0L, Long::sum)).get();
  assertEquals((lastNum + firstNum) * lastNum / 2, actualTotal);
}

我们使用ForkJoinPool的构造方法并设定并行级别为4去创建一个线程池。要想确定不同环境的最优值(optimal),我们需要试验一下。一个好的做法就是,基于你CPU的核数来确定并行级别的数值。

4.总结

我们简要地看了一下,如何使用一个自定义的Thread Pool运行并行流。只要在正确的环境中配置了合适的平行级别,就能在确定的情况下获得较高的执行性能。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

Java Set简介_动力节点Java学院整理

Set最大的特性就是不允许在其中存放的元素是重复的。接下来通过本文给大家分享java set常用方法和原理分析,需要的的朋友参考下吧
收藏 0 赞 0 分享

Java Timezone类常见问题_动力节点Java学院整理

这篇文章主要介绍了Java Timezone类常见问题的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

javaWeb项目部署到阿里云服务器步骤详解

本篇文章主要介绍了javaWeb项目部署到阿里云服务器步骤详解,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解使用zxing库生成QR-Code二维码

这篇文章主要介绍了详解使用zxing库生成QR-Code二维码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现对服务器的自动巡检邮件通知

这篇文章主要为大家详细介绍了java实现对服务器的自动巡检邮件通知,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java随机验证码生成实现实例代码

这篇文章主要介绍了java随机验证码生成实现实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

java读取txt文件代码片段

这篇文章主要为大家详细介绍了java读取txt文件的代码片段,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java连接mysql数据库的方法

这篇文章主要为大家详细介绍了java连接mysql数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java 算法之快速排序实现代码

这篇文章主要介绍了java 算法之快速排序实现代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

这篇文章主要介绍了详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多