Fork与Join相关

最近学习Java Concurrent并发包下面的部分东西,国外 Doug Lea大神写的。

在技术群共享里找了一份资料,看的是阿里巴巴里温绍锦老师的《Java并发程序设计教程》这个PPT,下面代码我也是按照教程敲出来的

里面有讲到Fork/Join,也是Java7才有的,个人理解就是将一件大事情分解成N个线程去处理,然后合并线程处理结果。

不知道是不是MapReduce模型很像,MapReduce还没有了解很多,后续去学习一哈。

下面是将一个大型数组排序。



import java.util.Arrays;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;

public class ForkPractice {
	
	
	public static void main(String[] args) {
		ForkJoinPool mainPool = new ForkJoinPool();
		int len = 1000*1000*10;
		int[] array = new int[len];
		mainPool.invoke(new SortTask(array, 0, len-1));
	}

	
	public static class SortTask extends RecursiveAction{
		private int[] array;
		private int fromIndex;
		private int toIndex;
		private final int chunksize= 1024;
		public SortTask(int[] array, int fromIndex, int toIndex) {
			this.array = array;
			this.fromIndex = fromIndex;
			this.toIndex = toIndex;
		}

		@Override
		protected void compute() {
			int size = toIndex-fromIndex+1;
			if(size<chunksize){
				Arrays.sort(array,fromIndex,toIndex);
			}else{
				int leftSize =size/2;
				SortTask leftTask = new SortTask(array, fromIndex, fromIndex+leftSize);
				SortTask rightTask =new SortTask(array,fromIndex+leftSize+1,toIndex);
				this.invokeAll(leftTask,rightTask);
			}
		}
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值