`

JDK 7 中的 Fork/Join 模式

阅读更多

参考1:http://www.ibm.com/developerworks/cn/java/j-lo-forkjoin/#list1

JDK 7 中的 Fork/Join 模式

参考2:http://www.ibm.com/developerworks/cn/java/j-jtp11137.html

Java 理论与实践: 应用 fork-join 框架

参考3:http://www.ibm.com/developerworks/cn/java/j-jtp03048.html

Java 理论与实践: 应用 fork-join 框架,第 2 部分

参考4:http://www.ibm.com/developerworks/cn/java/j-java7.html

Java 技术,IBM 风格: Java 技术的新纪元

看看了《JDK 7 中的 Fork/Join 模式》本来想试一试,结果没有试出来。盼高手指点:SortTask中找不到coInvoke函数了。

程序是:

public class TestForkJoinSimple {
	private static final int NARRAY = 16; //For demo only
    long[] array = new long[NARRAY];
    Random rand = new Random();

    @Before
    public void setUp() {
        for (int i = 0; i < array.length; i++) {
            array[i] = rand.nextLong()%100; //For demo only
        }
        System.out.println("Initial Array: " + Arrays.toString(array));
    }

    @Test
    public void testSort() throws Exception {
        ForkJoinTask sort = new SortTask(array);
        ForkJoinPool fjpool = new ForkJoinPool();
        fjpool.submit(sort);
        fjpool.shutdown();

        fjpool.awaitTermination(30, TimeUnit.SECONDS);

        assertTrue(checkSorted(array));
    }

    boolean checkSorted(long[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] > (a[i + 1])) {
                return false;
            }
        }
        return true;
    }
}

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;
        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);
            System.out.println("\npivot = " + pivot + ", low = " + lo + ", high = " + hi);
			System.out.println("array" + Arrays.toString(array));
            coInvoke(new SortTask(array, lo, pivot - 1), new SortTask(array,
                    pivot + 1, hi));
        }
    }

    private int partition(long[] array, int lo, int hi) {
        long x = array[hi];
        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 void sequentiallySort(long[] array, int lo, int hi) {
        Arrays.sort(array, lo, hi + 1);
    }
}

 

详细说明看参考1,需要jdk6和JSR-166y(http://g.oswego.edu/dl/concurrency-interest/)。

分享到:
评论
2 楼 hj01kkk 2015-07-27  
1楼用法正解
1 楼 fish_no7 2015-04-09  
使用 new SortTask().fork()

相关推荐

    JDK7中的ForkJoin模式

    JDK 7 中引入的 Fork/Join 模式是一种基于分治策略的并行编程模型,旨在简化在多核处理器环境下实现高效的并行计算。这一模式的核心思想是将复杂的大任务拆分成一系列小任务,然后将这些小任务并行执行,最后再合并...

    java Fork Join框架及使用

    Fork/Join框架是Java7引入的一种用于并行任务执行的框架,它允许将复杂任务拆分成多个子任务,并行执行,然后通过join操作将结果聚合。Fork/Join框架特别适合处理可以递归拆分的计算密集型任务,比如大数据集的搜索...

    jdk-8u261-windows-x64安装包

    新特性主要涉及:对于JDK7中Fork/Join并行处理的升级;支持Lambda表达式;添加了Stream API;对于注解的拓展,加入了类型注解、重复注解;在G1回收器中支持字符串去重;内存空间中删除了永久代,引入了元空间。

    基于JDK的ForkJoin构建一个简单易用的并发组件1

    在Java编程中,线程池和并发任务执行是常见的方式,但在某些场景下,我们可以利用JDK的ForkJoin框架来构建更加高效和易用的并发组件。ForkJoin框架自Java 7引入,它为处理大型任务提供了一种分解成多个子任务并行...

    JDK1.7-64/32位精简绿色版

    2. **多路归并排序(Fork/Join Framework)**:这是一个并行计算框架,用于将大型任务拆分为更小的子任务,以利用多核处理器的并行处理能力。 3. **字符串inswitch语句**:在switch语句中可以直接使用字符串,提高...

    JDK1.7(JavaSE1.7/JDK7)

    ` 这样的写法在JDK7中成为可能。 JDK7还增强了异常处理,引入了“异常链”功能,允许一个异常捕获另一个异常,并将它们串联起来,便于追踪错误来源。此外,新的“catch多个异常”语法使得在一个catch块中处理多种...

    jdk7api帮助文档

    而在JDK7中,实现了自动关闭资源的机制,只要资源实现了`java.lang.AutoCloseable`接口,就可以在try块中直接声明并使用,程序结束时会自动调用`close()`方法。 其次,多线程处理方面,JDK7引入了Fork/Join框架,它...

    jdk 7 32位免安装版

    6. **Fork/Join框架(Fork/Join Framework)**:用于并行计算的新框架,基于工作窃取算法。 7. **新的Swing事件模型**:改进了Swing GUI库的事件处理机制。 8. **改进的JSON支持**:提供了一个新的`javax.json`包来...

    jdk7 jdk-7u80-linux-x64 网盘下载

    在JDK 7中,垃圾回收机制得到了显著的优化。特别是对G1(Garbage First)收集器进行了增强,使得它在多核处理器上表现更佳,减少了应用程序的暂停时间,提高了吞吐量。 ##### 2.2 文件系统API增强 为了更好地支持...

    jdk7(Linux 平台jdk7 )

    JDK7引入了许多新特性,例如动态类型语言支持( invokedynamic 指令)、Project Coin的小改进(如 try-with-resources 语句、多 catch 块、改进的类型推断等),以及并发改进(如Fork/Join框架和Parallel Scanning)...

    jdk7-aarch64-uos.tar.gz

    例如,动态语言支持、Fork/Join框架、并发工具的增强以及新的编译器——CTW(Compartment Type-Wise)等。这些更新显著提高了开发效率和程序性能。 针对Aarch64(也称为ARM64或AArch64)架构,这是一种64位指令集...

    JDK7新特性(完整篇)

    5. **JDK7新特性&lt;五&gt; fork/join 框架** Fork/Join框架是Java并行编程的一个重要工具,它基于分治策略,允许开发者将大任务拆分成小任务,然后并行执行,最后合并结果,显著提高了处理大规模计算任务的能力。 6. **...

    jdk8文件【版本号jdk1.8.0_151】

    6. ** 并发改进**:JDK 8在并发编程方面也做了改进,例如`Fork/Join`框架的改进,以及`ConcurrentHashMap`性能的提升。 7. ** Nashorn JavaScript引擎**:JDK 8引入了一个名为Nashorn的JavaScript引擎,允许Java...

    jdk7-linux-x64.tar.gz

    在Java 7中,有几个关键的特性值得注意: 1. **多线程并发控制**:引入了Fork/Join框架,通过工作窃取算法提高并行计算效率,同时提供了`Phaser`、`CountDownLatch` 和 `CyclicBarrier` 等并发工具类。 2. **...

    jdk api 1.8中文API

    在JDK1.8中,有许多重要的更新和改进,其中最为人所知的可能就是Lambda表达式和Stream API的引入,它们极大地提升了Java语言的函数式编程能力。Lambda表达式使得匿名函数的编写更为简洁,可以更方便地处理回调和事件...

    Java JDK 7学习笔记 PDF

    3. **多线程改进**:JDK 7提供了`Fork/Join`框架,这是一种基于工作窃取算法的并行编程模型,用于高效地执行大量可分解的任务。 4. **try-with-resources语句**:这个新特性允许自动关闭实现了`AutoCloseable`接口...

    JDK7 Linux64位rpm版本

    "JDK7" 是JDK的一个重要版本,引入了多个新特性,如动态类型语言支持、Fork/Join框架、try-with-resources语句等。 "Linux" 是一种开源的操作系统,广泛应用于服务器、桌面环境和其他嵌入式设备。 **详细知识点:**...

    jdk7官方源码工程

    【标签】"jdk7"指代了Java平台的第七个主要版本,它在2011年发布,引入了许多新的特性,如try-with-resources语句、多线程的Fork/Join框架、改进的类型推断(Project Coin)、文件系统API(NIO.2)以及并发工具的...

    jdk7新特性jdk8新特性

    在Java 7中,通过类型推断,我们可以更简洁地创建泛型实例,省略new表达式后的类型参数。例如: ```java List&lt;String&gt; list = new ArrayList(); // 可以简化为 List&lt;String&gt; list = new ArrayList(); ``` #### 4. ...

    jdk-7u80-windows-x64.exe

    "jdk-7" 指的是Java SE(标准版)7,是Java的一个重要版本,引入了多个新特性,如动态类型语言支持( invokedynamic 字节码指令)、Fork/Join框架、并发改进等。"jdk" 是Java Development Kit的缩写,是开发Java应用...

Global site tag (gtag.js) - Google Analytics