【转】Fork/Join框架测试
Fork/Join框架介绍
下面使用该框架计算0-50000000000的和,并比较普通计算方法、Fork/Join框架、Java8新特性三种计算方式的计算时间:
- import java.time.Duration;
- import java.time.Instant;
- import java.util.concurrent.ForkJoinPool;
- import java.util.concurrent.ForkJoinTask;
- import java.util.concurrent.RecursiveTask;
- import java.util.stream.LongStream;
- import org.junit.Test;
- public class TestForkJoinPool {
- public static void main(String[] args) {
- Instant start = Instant.now();
- ForkJoinPool pool = new ForkJoinPool();
- ForkJoinTask<Long> task = new ForkJoinSumCalculate(0L, 50000000000L);
- Long sum = pool.invoke(task);
- System.out.println(sum);
- Instant end = Instant.now();
- System.out.println("耗费时间为:" + Duration.between(start, end).toMillis());//
- }
- @Test
- public void test1(){
- Instant start = Instant.now();
- long sum = 0L;
- for (long i = 0L; i <= 50000000000L; i++) {
- sum += i;
- }
- System.out.println(sum);
- Instant end = Instant.now();
- System.out.println("耗费时间为:" + Duration.between(start, end).toMillis());//
- }
- //java8 新特性
- @Test
- public void test2(){
- Instant start = Instant.now();
- Long sum = LongStream.rangeClosed(0L, 50000000000L)
- .parallel()
- .reduce(0L, Long::sum);
- System.out.println(sum);
- Instant end = Instant.now();
- System.out.println("耗费时间为:" + Duration.between(start, end).toMillis());//
- }
- }
- class ForkJoinSumCalculate extends RecursiveTask<Long>{
- private static final long serialVersionUID = -259195479995561737L;
- private long start;
- private long end;
- private static final long THURSHOLD = 10000L; //临界值
- public ForkJoinSumCalculate(long start, long end) {
- this.start = start;
- this.end = end;
- }
- @Override
- protected Long compute() {
- long length = end - start;
- if(length <= THURSHOLD){
- long sum = 0L;
- for (long i = start; i <= end; i++) {
- sum += i;
- }
- return sum;
- }else{
- long middle = (start + end) / 2;
- ForkJoinSumCalculate left = new ForkJoinSumCalculate(start, middle);
- left.fork(); //进行拆分,同时压入线程队列
- ForkJoinSumCalculate right = new ForkJoinSumCalculate(middle+1, end);
- right.fork(); //
- return left.join() + right.join();
- }
- }
- }
转载自:http://blog.csdn.net/xiangwanpeng/article/details/54977709
【转】Fork/Join框架测试的更多相关文章
- JAVA中的Fork/Join框架
看了下Java Tutorials中的fork/join章节,整理下. 什么是fork/join框架 fork/join框架是ExecutorService接口的一个实现,可以帮助开发人员充分利用多核 ...
- Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)
作者简介 Dong Lea任职于纽约州立大学奥斯威戈分校(State University of New York at Oswego),他发布了第一个广泛使用的java collections框架实 ...
- Fork/Join 框架框架使用
1.介绍 Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.在多核计算机中正确使用可以很好的 ...
- 013-多线程-基础-Fork/Join框架、parallelStream讲解
一.概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 它同ThreadPoolExecut ...
- Java 并发之 Fork/Join 框架
什么是 Fork/Join 框架 Fork/Join 框架是一种在 JDk 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务.通过其命名 ...
- 聊聊并发(八)——Fork/Join框架介绍
作者 方腾飞 发布于 2013年12月23日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 ...
- JDK7新特性之fork/join框架
The fork/join framework is an implementation of the ExecutorService interface that helps you take ad ...
- Java并发——Fork/Join框架
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4631466. ...
- 转:聊聊并发(八)——Fork/Join框架介绍
1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...
随机推荐
- centos6.8安装zabbix
前后用了两台电脑来实验,前后画风不一样,请忽略 一.安装php环境 移除目前系统安装的 PHP 组件 yum remove php* -y 安装 PHP 的 YUM 源 rpm -Uvh http: ...
- Jenkins的权限控制和Rundeck的远程认证
1.权限控制的基本设置 1.1选择基于角色权限的分配策略 1.2 配置全局权限和项目权限 具体的权限对应关系见下表: Overall(全局) Credentials(凭证) Slave(节点) Job ...
- 2017浙江省赛 H - Binary Tree Restoring ZOJ - 3965
地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3965 题目: iven two depth-first-search ...
- eclipse调试程序界面简单介绍使用
右键程序 Debug 运行后 如下图:
- nodejs做中间层,向后端取数据
var http=require('http'): http.get('http://baidu/dksapi/weiboLive/GetSquareLive?pagecount=1&pag ...
- 对称加密与非对称加密,以及RSA的原理
一 , 概述 在现代密码学诞生以前,就已经有很多的加密方法了.例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊.16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码.猪圈密码, ...
- [one day one question] Iscroll 5.0 在chrome上无法滑动
问题描述: Iscroll 5.0 在chrome上无法滑动,不仅仅在chromePC的开发的时候,在手机上的chrome也有同样的问题,这怎么破? 解决方案: // 关闭 PointerEvent ...
- XPO开发指南简要
一.XPO简介: XPO即eXpress Persistent Objects for .NET,现在这里介绍的版本是1.5. XPO在应用程序代码和数据库之间扮演了一个中间层的角色,简单而言,就是将 ...
- https nginx配置
cd /saas/conf/nginx/ mkdir key cd key 创建key: openssl req -nodes -newkey rsa:2048 -keyout server.key ...
- yield生成器函数
生成器有主要有四种方法: next() 执行函数,直到遇到下一个yield为止,并返回值 send(value) 为生成器发送一个数值,next()方法就相当于send(None) close() 终 ...