文档章节

多线程Fork/Join框架的使用

mifans
 mifans
发布于 2017/03/28 12:06
字数 160
阅读 35
收藏 0
package com.jia.concurrency;

import java.util.ArrayList;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;

public class CountTask extends RecursiveTask<Long>{

	private  static final  int  THRESHOLD=10000; 
	private long start;
	private long end;
	
	public CountTask(long start,long end) {
		this.start=start;
		this.end=end;
	}
	
	@Override
	protected Long compute() {
		long sum=0;
		boolean canCompute=(end-start)<THRESHOLD;
		if (canCompute) {
			for (long i =start;  i <=end;i++) {
				sum+=i;
			}
		}else{
			//分成100个小任务
			long step=(start+end)/100;
			ArrayList<CountTask> subTasks=new ArrayList<CountTask>();
			long pos=start;
			for (int i = 0; i <100; i++) {
				long lastOne=pos+step;
				if (lastOne>end) {
					lastOne=end;
				}
				CountTask subTask=new CountTask(pos, lastOne);
				pos+=step+1;
				subTasks.add(subTask);
				subTask.fork();
				
			}
			for (CountTask countTask : subTasks) {
				sum+=countTask.join();
			}
		}
		
		return sum;
	}
	public static void main(String[] args) {
		ForkJoinPool forkJoinPool=new ForkJoinPool();
		CountTask task=new CountTask(0, 200000L);
		ForkJoinTask<Long> result=forkJoinPool.submit(task);
		try {
			long res=result.get();
			System.err.println("sum="+res);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

 

© 著作权归作者所有

mifans
粉丝 11
博文 204
码字总数 103669
作品 0
海淀
程序员
私信 提问
单线程排序和利用Fork/Join进行多线程并行排序的简单对比

Fork/Join框架自从在JDK7中引进之后,对并行计算的设计带来了更多便利。 本文使用java原生的排序方法Array.sort单线程排序,和利用Fork/Join框架进行任务分割设计的快速排序进行对比。 首先,...

Nox
2015/08/10
1K
0
重做一道Java面试题(Fork/Join)

前几天参加了一场面试,当时有这莫一道题: 老实说,我当时并没有想出来具体该如何实现,只是有个大致的方向,肯定是的思想;这两天我一直在尝试将这些当时没做出来的题想办法做出来,查了一...

since1986
2017/09/17
0
0
线程基础:多任务处理(12)——Fork/Join框架(基本使用)

1. 概述 在进行系统存储专题的学习、总结、整理和写作的过程中感觉有点累了,加上最近在做书稿的第二次校稿工作,系统存储专题的学习和写作进度明显有些滞后,特别是编写的Ceph MON知识点。所...

yinwenjie
2017/05/14
0
0
线程基础:多任务处理(16)——Fork/Join框架(排序算法性能补充)

1、概述 在之前的一篇文章《线程基础:多任务处理(13)——Fork/Join框架(解决排序问题)》中,我们使用了fork/join框架提高归并排序的性 能。那篇文章发布后,有的读者联系我,觉得单就归...

yinwenjie
2017/06/06
0
0
【转】JDK 7 中的 Fork/Join 模式

介绍 随着多核芯片逐渐成为主流,大多数软件开发人员不可避免地需要了解并行编程的知识。而同时,主流程序语言正在将越来越多的并行特性合并到标准库或者语言本身之中。我们可以看到,JDK 在...

mj4738
2011/11/28
357
0

没有更多内容

加载失败,请刷新页面

加载更多

从0开始学FreeRTOS-(列表&列表项)-6

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
28分钟前
4
0
Java的23种设计模式,详细讲解(一)

一、概述 设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。 拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 1. 单例(Singleton...

李红欧巴
44分钟前
5
0
android 使用asynctask结合fragment更新UI(另附线程池管理示例)

https://blog.csdn.net/qq_16064871/article/details/70767949

shzwork
44分钟前
3
0
SpringCloud实现分库分表模式下,数据库实时扩容方案

本文源码:GitHub·点这里 || GitEE·点这里 一、项目结构 1、工程结构 2、模块命名 shard-common-entity: 公共代码块shard-open-inte: 开放接口管理shard-eureka-7001: ...

知了一笑
46分钟前
5
0
js--时间切割装换工具类

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> /* * 修改data原型对象Format方法 ......

zhengzhixiang
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部