`

jdk1.7 并行工具类库用法测试

阅读更多
引用:http://blog.chinaunix.net/uid-540802-id-2881055.html
以下是我用并行算法实现快速排序的类.



下面的是task




package chouy.jdk7;
1.

2.import java.util.Arrays;

3.import java.util.concurrent.RecursiveAction;

4.

5./**

6. * 并行快速排序的task<br>

7. * 算法为如果排序长度小于10,则使用JDK自带的{@link java.util.Arrays#sort(int[] a, int fromIndex, int toIndex)}方法;如果长度大于10,则用第一个数字为中间数,做快速排序.

8. * 分成前后两部分后使用并行框架并行运行.

9. *

10. * @author chouy

11. */

12.public class QuickSortTask extends RecursiveAction

13.{

14.    static int THRESHOLD = 256;

15.    private int[] array;

16.    int start;

17.    int end;

18.

19.    public QuickSortTask(int[] array, int start, int end)

20.    {

21.        this.array = array;

22.        this.start = start;

23.        this.end = end;

24.    }

25.

26.    @Override

27.    protected void compute()

28.    {

29.        if (end - start < THRESHOLD)

30.        {

31.            if (end - start == 1)

32.                return;

33.            Arrays.sort(array, start, end + 1);

34.        }

35.        else

36.        {

37.            int v = array[start];

38.            boolean isAdd = true;

39.            int i, j;

40.            for (i = start, j = end; i < j;)

41.            {

42.                if (isAdd)

43.                {

44.                    if (v > array[j])

45.                    {

46.                        array[i] = array[j];

47.                        array[j] = v;

48.                        isAdd = false;

49.                        i++;

50.                    }

51.                    else

52.                    {

53.                        j--;

54.                    }

55.                }

56.                else

57.                {

58.                    if (v < array[i])

59.                    {

60.                        array[j] = array[i];

61.                        array[i] = v;

62.                        isAdd = true;

63.                        j--;

64.                    }

65.                    else

66.                    {

67.                        i++;

68.                    }

69.                }

70.            }

71.            // 并行执行分成的两部分

72.

73.            invokeAll(new QuickSortTask(array, start, i - 1), new QuickSortTask(array, i + 1, end));

74.        }

75.    }

76.}

这是快速排序的工具类,里面有main方法用来测试.

1.package chouy.jdk7;

2.

3.import java.util.Arrays;

4.import java.util.Random;

5.import java.util.concurrent.ForkJoinPool;

6.import java.util.concurrent.ForkJoinTask;

7.import java.lang.Runtime;

8.

9./**

10. * quick sort used jdk7's join

11. *

12. * @author chouy

13. */

14.public class QuickSort

15.{

16.    ForkJoinPool pool;

17.

18.    public static void main(String[] args)

19.    {

20.        QuickSort quickSort = new QuickSort();

21.        int arraySize = 40;

22.        int[] array = new int[arraySize];

23.        Random r = new Random();

24.        for (int i = 0; i < array.length; i++)

25.        {

26.            array[i] = r.nextInt(arraySize);

27.        }

28.        System.out.println(Arrays.toString(array));

29.        // Arrays.sort(array, 0, array.length);

30.

31.        // System.out.println(Arrays.toString(array));

32.

33.        quickSort.sort(array);

34.        System.out.println(Arrays.toString(array));

35.    }

36.

37.    public QuickSort()

38.    {

39.        pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors());

40.    }

41.

42.    public synchronized void sort(int array[])

43.    {

44.        ForkJoinTask<Void> job = pool.submit(new QuickSortTask(array, 0, array.length - 1));

45.        job.join();

46.    }

47.}

最后再提供一个junit测试类,用于测试正确性,性能等.

1.package chouy.jdk7;

2.

3.import java.util.Arrays;

4.import java.util.Random;

5.

6.import org.junit.Assert;

7.import org.junit.Before;

8.import org.junit.Test;

9.

10.public class QuickSortTest

11.{

12.    QuickSort quickSort;

13.

14.    @Before

15.    public void setUp() throws Exception

16.    {

17.        quickSort = new QuickSort();

18.    }

19.

20.    /**

21.     * 测试结果是否正确

22.     */

23.    @Test

24.    public void testSort()

25.    {

26.        int arraySize = 40;

27.        int[] arrayQuickSort = new int[arraySize];

28.        int[] arrayArraysSort = new int[arraySize];

29.        Random r = new Random();

30.        for (int i = 0; i < arrayQuickSort.length; i++)

31.        {

32.            arrayQuickSort[i] = r.nextInt(arraySize);

33.        }

34.        System.arraycopy(arrayQuickSort, 0, arrayArraysSort, 0, arraySize);

35.

36.        System.out.println(Arrays.toString(arrayQuickSort));

37.        quickSort.sort(arrayQuickSort);

38.

39.        Arrays.sort(arrayArraysSort);

40.        for (int i = 0; i < arrayQuickSort.length; i++)

41.        {

42.            Assert.assertEquals(arrayQuickSort[i], arrayArraysSort[i]);

43.        }

44.    }

45.

46.    /**

47.     * 测试快速排序的性能与Arrays.sort()方法的比较

48.     */

49.    @Test

50.    public void testPerformance()

51.    {

52.        int arraySize = 50000000;

53.        int[] arrayQuickSort = new int[arraySize];

54.        int[] arrayArraysSort = new int[arraySize];

55.        Random r = new Random();

56.        for (int i = 0; i < arrayQuickSort.length; i++)

57.        {

58.            arrayQuickSort[i] = r.nextInt(arraySize);

59.        }

60.        System.arraycopy(arrayQuickSort, 0, arrayArraysSort, 0, arraySize);

61.

62.        // System.out.println(Arrays.toString(arrayQuickSort));

63.

64.        System.out.println("start concurrent");

65.        long start = System.currentTimeMillis();

66.        quickSort.sort(arrayQuickSort);

67.        long end = System.currentTimeMillis();

68.        long spend1 = end - start;

69.

70.        System.out.println("start system quick sort");

71.        start = System.currentTimeMillis();

72.        Arrays.sort(arrayArraysSort);

73.        end = System.currentTimeMillis();

74.        long spend2 = end - start;

75.        System.out.println("concurrent: " + spend1 + ", quickSort: " + spend2);

76.    }

77.

78.    /**

79.     * 用来测试快排方法中,被排序数组长度为5000万时,threshold值不同时运行的时间.

80.     */

81.    @Test

82.    public void testBestThreshold()

83.    {

84.        int arraySize = 50000000;

85.        int[] arrayQuickSort = new int[arraySize];

86.        int[] arrayArraysSort = new int[arraySize];

87.        Random r = new Random();

88.        for (int i = 0; i < arrayQuickSort.length; i++)

89.        {

90.            arrayQuickSort[i] = r.nextInt(arraySize);

91.        }

92.        for (int i = 128; i <= arraySize; i = i * 2)

93.        {

94.            System.arraycopy(arrayQuickSort, 0, arrayArraysSort, 0, arraySize);

95.            QuickSortTask.THRESHOLD = i;

96.            System.out.print("threshold = " + i);

97.            long start = System.currentTimeMillis();

98.            quickSort.sort(arrayArraysSort);

99.            long end = System.currentTimeMillis();

100.            System.out.println(" spends " + (end - start) + " ms");

101.        }

102.    }

103.}
分享到:
评论

相关推荐

    jdk1.7安装包下载

    2. **字符串连接优化**:在JDK1.7中,字符串连接使用了新的` StringJoiner `类,该类提高了字符串拼接的效率,尤其是在大量字符串连接时。 3. **try-with-resources语句**:这是一个新的异常处理机制,允许自动关闭...

    java jdk 1.7官网免安装版本

    Java JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,主要用于编写、编译、测试和运行Java应用程序。这个版本的JDK在2012年发布,引入了许多新特性,提升了性能,并...

    jdk1.7版本免安装

    Java Development Kit (JDK) 是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。 JDK 1.7,也被称为Java SE 7(Java Standard Edition 7),是Oracle公司发布的一个重要版本...

    jdk1.7-linux

    Java Development Kit (JDK) 是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具和库。"jdk1.7-linux" 指的是Oracle公司发布的针对Linux操作系统的JDK 1.7版本,也称为Java 7。...

    java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本

    为了在CentOS 7上使用JDK 1.7编译OpenJDK 1.8,你需要遵循以下步骤: 1. **安装依赖**:确保系统已安装了必要的编译工具,如GCC、make等,并安装OpenJDK 1.7作为构建环境。 2. **下载源码**:获取到`jdk7u-dev-b...

    jdk1.7 windows 64位

    总结,JDK 1.7是Java开发的基础,它的功能强大且全面,不仅提供了开发所需的工具,还带来了许多增强的特性,为开发者提供了更高效、更便捷的开发体验。在Windows 64位环境下,正确安装和配置JDK 1.7是进行Java开发的...

    jdk 1.7 绿色版

    **正文** ...综上所述,JDK 1.7是一个具有诸多创新特性和性能优化的Java开发工具,其绿色版的便携性更是提升了开发者的使用体验。通过了解和掌握这些特性,开发者可以编写出更高效、更易维护的Java代码。

    java-JDK1.7.zip java-JDK1.7.zip

    Java JDK 1.7,全称为Java Development Kit 1.7,是Oracle公司推出的用于开发Java应用程序的重要工具集。这个版本在Java发展历程中扮演着重要角色,提供了许多新特性和性能优化,旨在提升开发效率和程序性能。下面将...

    jdk1.7 64位 解压缩版

    在这个特定的案例中,我们讨论的是"jdk1.7 64位 解压缩版",这意味着它是针对64位操作系统设计的JDK1.7版本,无需安装,只需解压即可使用。 JDK1.7,也被称为Java 7或Java SE 7(Java Standard Edition 7),是...

    jdk1.7-linux-x64 工具下载

    本资源提供的"jdk1.7-linux-x64"是Oracle JDK 1.7的64位版本,专为Linux操作系统设计,特别适合在64位Linux环境下进行Java开发工作。 JDK 1.7,也被称为Java 7,是Java平台标准版(Java SE)的一个重要版本。它在...

    JDK1.7Linux版本

    Java Development Kit(JDK)是Java编程语言的核心组件,它包含了编译器、调试器、Java运行时环境(JRE)以及一系列工具,使得开发者能够编写、测试和部署Java应用程序。JDK 1.7,也被称为Java 7,是Oracle公司发布...

    jdk1.7 免安装版本

    JDK 1.7,也称为 Java 7,是 Oracle 公司提供的用于开发和运行Java应用程序的重要工具集。免安装版本,即绿色版,是不需要通过传统安装过程就可以使用的版本。这种版本通常被压缩在一个文件包里,用户只需解压缩并...

    JDK1.7 Windows 32位

    JDK1.7,全称Java Development Kit 1.7,是Oracle公司发布的一个针对Java开发者的工具集,主要用于编写、编译、测试和运行Java应用程序。这个版本的JDK专为Windows 32位操作系统设计,意味着它可以在32位的Windows...

    jdk1.7 exe文件 1.7

    - **动态类型语言支持**:JDK 1.7引入了类型推断(Type Inference)的概念,使得在编写泛型代码时可以使用`&lt;&gt;`操作符(被称为钻石操作符),简化了代码。 - **开关表达式(Switch on Strings)**:允许在switch...

    JDK1.7(JavaSE1.7/JDK7)

    JDK1.7,也称为Java SE 1.7或JDK7,是Java开发工具包的一个重要版本,对于Java开发者来说是必备的环境。它在Java发展历程中扮演了关键角色,引入了许多新特性,提升了开发效率并优化了性能。在此,我们将深入探讨JDK...

    jdk1.7 jdk1.7 32位 免安装版

    1. **动态类型语言支持**:JDK 1.7引入了Type Inference for Generic Instance Creation(类型推断),使得使用泛型更加方便,特别是对于匿名内部类和Lambda表达式。 2. **尝试-with-resources语句**:这是一个新的...

    JDK1.7 64位 windows安装版

    3. **字符串In-place替换**:`String`类新增了`replaceFirst()`和`replaceAll()`方法,可以在原字符串上进行替换操作,而无需创建新对象。 4. **开关语句支持字符串**:`switch`语句不再仅限于整型和枚举类型,现在...

    jdk1.7 64位 官方正式版下载

    `java.util.concurrent`包增加了新的并发工具类,提高了多线程编程的便利性。 总之,JDK 1.7 64位官方正式版是Java开发者和企业常用的开发环境,它集成了多项性能优化和新功能,为开发高质量的Java应用程序提供了...

    JDK1.7.0.51 免安装版

    JDK1.7.0.51免安装版是Java开发工具包的一个特定版本,专为那些希望在不进行系统级安装的情况下使用Java环境的用户设计。这个版本适用于64位操作系统,这意味着它能够处理更大内存的程序,并且在64位计算机上运行...

    jdk1.7稳定版

    JDK 1.7稳定版意味着它是经过广泛测试和调试的,适合生产环境使用的版本。 1. **动态类型语言支持**:Java 7引入了 invokedynamic 指令,使得运行时能够动态解析方法调用。这一特性主要是为了支持Groovy、Scala等...

Global site tag (gtag.js) - Google Analytics