Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

Java7 新特性fork/join

来源: 未知 分享至:
/**
* User: huangbaichuan
* Date: 11-8-21
* Time: 下午2:04
* To change this template use File | Settings | File Templates.
*/

import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveAction;
import java.util.concurrent.TimeUnit;

public class SortTask extends RecursiveAction {
final long[] array;
final int lo;
final int hi;
private int THRESHOLD = 0; //For demo only

public SortTask(long[] array) {
this.array = array;
this.lo = 0; //0
this.hi = array.length - 1;
}

public SortTask(long[] array, int lo, int hi) {
this.array = array;
this.lo = lo;
this.hi = hi;
}

protected void compute() {

//如果数据量比较少,就直接使用系统的排序方式
if (hi - lo < THRESHOLD)
sequentiallySort(array, lo, hi);
else {
int pivot = partition(array, lo, hi);
//把数组切分成两部分,然后在分别做排序
this.invokeAll(new SortTask(array,
pivot
+ 1, hi), new SortTask(array, lo, pivot - 1)) ;


}
}

private int partition(long[] array, int lo, int hi) {

long x = array[hi];
//-1
int i = lo - 1;
for (int j = lo; j < hi; j++) {
if (array[j] <= x) {
i
++;
swap(array, i, j);
}
}
swap(array, i
+ 1, hi);
return i + 1;
}

private void swap(long[] array, int i, int j) {
if (i != j) {
long temp = array[i];
array[i]
= array[j];
array[j]
= temp;
}
}

private

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史