`

java线程:jdk 7中的Fork/Join模式

 
阅读更多

//尚未研究完成...

 

 

package org.bluebear.temp;

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;

/**
 * RecursiveAction里面只有一个compute抽象方法。
 * 
 * 
 */
public class SortTask extends RecursiveAction {

	private static final long serialVersionUID = -4706085992307767517L;

	final long[] array;
	final int lo;
	final int hi;

	private int THRESHOLD = 30;

	public SortTask(long[] array) {
		this(array, 0, array.length - 1);
	}

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

	@Override
	protected void compute() {
		if (hi - lo < THRESHOLD) {
			sequentiallySort(array, lo, hi);
		} else {
			int pivot = partition(array, lo, hi);
			this.invokeAll(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);
	}

	public static void main(String[] args) throws Exception {
		long[] array = new long[100];
		
		Random random = new Random();
		
		for(int i=0;i<100;i++){
			array[i] = random.nextInt(1000);
		}
		
		ForkJoinTask sort = new SortTask(array);
		ForkJoinPool pool = new ForkJoinPool();
		pool.submit(sort);
		pool.shutdown();
		pool.awaitTermination(30, TimeUnit.SECONDS);
		
		for(int i=0;i<array.length;i++){
			System.out.print(array[i] + " , ");
		}
		
	}

}
 

 

 

 

参考:

http://www.deftitlenil.com/2011/04/blog-post_05.html

http://www.ibm.com/developerworks/cn/java/j-lo-forkjoin/

http://drdobbs.com/blogs/jvm/231000556

分享到:
评论

相关推荐

    JDK7中的ForkJoin模式

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

    java Fork Join框架及使用

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

    Java JDK 7学习笔记 PDF

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

    java jdk1.7.0_79

    4. **并发与多线程**:Java 7引入了Fork/Join框架,通过工作窃取算法,优化了并行计算性能。此外,`ConcurrentHashMap`的实现也得到了增强,提高了并发访问的效率。 5. **NIO.2**:Java 7引入了New I/O 2(NIO.2)...

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

    3. **多线程并行流**:Java 7引入了Fork/Join框架和并行流API,提供了处理大量数据的并行计算能力,提高了数组和集合操作的效率,如并行排序。 4. **钻石运算符**:在创建匿名内部类或使用泛型时,可以省略掉类型...

    7u80windows64位JDK

    2. **多线程增强**:JDK 7的Fork/Join框架提高了多核处理器上的并发性能,使得复杂的并行计算变得更加容易。 3. **NIO.2文件系统接口**:新增的java.nio.file包提供了对文件系统操作的全面支持,包括异步I/O和文件...

    jdk7-windows-x64.rar

    9. **多线程与并发**: JDK 7在多线程和并发方面也有改进,如Fork/Join框架,它简化了并行编程,特别是在数据密集型任务中,能够提高程序的执行效率。 10. **垃圾回收(GC)**: JDK 7中的垃圾收集器改进了内存管理和...

    windows-java-jdk7

    6. **Fork/Join框架**:用于并行处理大型任务,如`java.util.concurrent.ForkJoinPool`。 7. **改进的Swing**:包括UI布局管理器的增强和新的`JTabbedPane`选项。 8. **元空间(Metaspace)**:取代了永久代,用于...

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

    在ForkJoin框架中,任务会自动进行工作窃取,即当一个工作线程完成自己的任务后,会尝试帮助其他线程处理未完成的任务,从而提高并行性。 对于商品详情页面展示的场景,我们可以设计一个`FetchDataTask`,它继承自`...

    Java JDK 8 exe安装版(Windows 64位)

    6. **改进的并发工具**:包括新的Fork/Join框架和ConcurrentHashMap的优化,提高了多线程编程的效率。 7. **编译器优化**:JDK 8的编译器(Javac)在语法糖和编译速度方面都有所提升,例如支持类型推断(@Override...

    java jdk 1.7官网免安装版本

    - **多线程处理增强**:Java 7增加了Fork/Join框架,用于高效处理大规模并行计算任务。 - **动态类型语言支持**:引入了`invokedynamic`指令,使得Java能够更好地支持脚本语言和其他动态类型语言。 - **NIO.2**:...

    JDK7 Linux64位rpm版本

    - **Fork/Join框架**:提供了并行执行任务的高效机制,是Java多线程处理的一大进步。 - **try-with-resources语句**:自动关闭资源,如文件流,增强了代码的简洁性和安全性。 - **多租户应用**:使得JVM可以同时...

    JDK8中文API

    8. **并行和并发改进**:JDK8改进了`Fork/Join`框架和`Parallel Streams`,使得多核处理器环境下并行处理性能显著提升。`ConcurrentHashMap`的性能也得到了优化,提供了更好的并发性能。 9. **方法引用和构造器引用...

    jdk7(window)64

    1. **多线程与并发优化**:JDK 7引入了Fork/Join框架,这是并行编程的一个强大工具,用于处理大型任务的拆分和合并。它通过`java.util.concurrent`包中的`ForkJoinPool`和`RecursiveTask`类实现。 2. **try-with-...

    Java-JDK-7.rar_jdk7

    1. **多线程改进**:Java 7引入了Fork/Join框架,它允许开发者将大任务分解为小任务并行执行,从而提高程序的执行效率。此外,`try-with-resources`语句的引入使得资源管理更加简洁,自动关闭在finally块中打开的...

    jdk1.7.0_17版本 jdk7

    1. **多线程与并发优化**:JDK7加强了对多线程和并发的支持,引入了Fork/Join框架,这是一个并行计算的模型,可以将大型任务拆分为可独立执行的小任务,然后合并结果,有效利用多核处理器的优势。 2. **类型推断**...

    JDk1.8中文帮助文档.zip / 免费下载

    8. **并发改进**:包括Fork/Join框架、并发集合的增强以及新的ConcurrentHashMap实现,提高了多线程环境下的性能和可编程性。 9. **并发工具类**:JDK 1.8增加了新的并发工具类,如Exchanger用于线程间交换数据,...

    jdk1.8.0_25_x64.zip

    8. **并发改进**:JDK 8对Fork/Join框架进行了优化,改进了并发性能,并引入了新的并发工具类,如CompletableFuture,提供了异步编程的高级抽象。 9. **新的编译器优化**:JDK 8的javac编译器在编译过程中进行了...

    Mac版本:jdk-8u202-macosx-x64.dmg.zip

    7. ** Nashorn JavaScript引擎**:Java 8引入了Nashorn JavaScript引擎,允许在Java应用中执行JavaScript代码,实现了Java和JavaScript之间的互操作性。 8. ** 并发改进**:包括Fork/Join框架的改进,以及新的并发...

    java /jdk1.6/jdk1.8中英文文档

    此外,还增加了对IPv6的全面支持,改进了内存管理和垃圾回收机制,以及增强了并发处理能力,例如Fork/Join框架的引入,它使得多线程编程更为高效。 JDK 1.8是Java发展的一个重要里程碑,它引入了Lambda表达式,这是...

Global site tag (gtag.js) - Google Analytics