//尚未研究完成...
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
分享到:
相关推荐
JDK 7 中引入的 Fork/Join 模式是一种基于分治策略的并行编程模型,旨在简化在多核处理器环境下实现高效的并行计算。这一模式的核心思想是将复杂的大任务拆分成一系列小任务,然后将这些小任务并行执行,最后再合并...
Fork/Join框架是Java7引入的一种用于并行任务执行的框架,它允许将复杂任务拆分成多个子任务,并行执行,然后通过join操作将结果聚合。Fork/Join框架特别适合处理可以递归拆分的计算密集型任务,比如大数据集的搜索...
3. **多线程改进**:JDK 7提供了`Fork/Join`框架,这是一种基于工作窃取算法的并行编程模型,用于高效地执行大量可分解的任务。 4. **try-with-resources语句**:这个新特性允许自动关闭实现了`AutoCloseable`接口...
4. **并发与多线程**:Java 7引入了Fork/Join框架,通过工作窃取算法,优化了并行计算性能。此外,`ConcurrentHashMap`的实现也得到了增强,提高了并发访问的效率。 5. **NIO.2**:Java 7引入了New I/O 2(NIO.2)...
3. **多线程并行流**:Java 7引入了Fork/Join框架和并行流API,提供了处理大量数据的并行计算能力,提高了数组和集合操作的效率,如并行排序。 4. **钻石运算符**:在创建匿名内部类或使用泛型时,可以省略掉类型...
2. **多线程增强**:JDK 7的Fork/Join框架提高了多核处理器上的并发性能,使得复杂的并行计算变得更加容易。 3. **NIO.2文件系统接口**:新增的java.nio.file包提供了对文件系统操作的全面支持,包括异步I/O和文件...
9. **多线程与并发**: JDK 7在多线程和并发方面也有改进,如Fork/Join框架,它简化了并行编程,特别是在数据密集型任务中,能够提高程序的执行效率。 10. **垃圾回收(GC)**: JDK 7中的垃圾收集器改进了内存管理和...
6. **Fork/Join框架**:用于并行处理大型任务,如`java.util.concurrent.ForkJoinPool`。 7. **改进的Swing**:包括UI布局管理器的增强和新的`JTabbedPane`选项。 8. **元空间(Metaspace)**:取代了永久代,用于...
在ForkJoin框架中,任务会自动进行工作窃取,即当一个工作线程完成自己的任务后,会尝试帮助其他线程处理未完成的任务,从而提高并行性。 对于商品详情页面展示的场景,我们可以设计一个`FetchDataTask`,它继承自`...
6. **改进的并发工具**:包括新的Fork/Join框架和ConcurrentHashMap的优化,提高了多线程编程的效率。 7. **编译器优化**:JDK 8的编译器(Javac)在语法糖和编译速度方面都有所提升,例如支持类型推断(@Override...
- **多线程处理增强**:Java 7增加了Fork/Join框架,用于高效处理大规模并行计算任务。 - **动态类型语言支持**:引入了`invokedynamic`指令,使得Java能够更好地支持脚本语言和其他动态类型语言。 - **NIO.2**:...
- **Fork/Join框架**:提供了并行执行任务的高效机制,是Java多线程处理的一大进步。 - **try-with-resources语句**:自动关闭资源,如文件流,增强了代码的简洁性和安全性。 - **多租户应用**:使得JVM可以同时...
8. **并行和并发改进**:JDK8改进了`Fork/Join`框架和`Parallel Streams`,使得多核处理器环境下并行处理性能显著提升。`ConcurrentHashMap`的性能也得到了优化,提供了更好的并发性能。 9. **方法引用和构造器引用...
1. **多线程与并发优化**:JDK 7引入了Fork/Join框架,这是并行编程的一个强大工具,用于处理大型任务的拆分和合并。它通过`java.util.concurrent`包中的`ForkJoinPool`和`RecursiveTask`类实现。 2. **try-with-...
1. **多线程改进**:Java 7引入了Fork/Join框架,它允许开发者将大任务分解为小任务并行执行,从而提高程序的执行效率。此外,`try-with-resources`语句的引入使得资源管理更加简洁,自动关闭在finally块中打开的...
1. **多线程与并发优化**:JDK7加强了对多线程和并发的支持,引入了Fork/Join框架,这是一个并行计算的模型,可以将大型任务拆分为可独立执行的小任务,然后合并结果,有效利用多核处理器的优势。 2. **类型推断**...
8. **并发改进**:包括Fork/Join框架、并发集合的增强以及新的ConcurrentHashMap实现,提高了多线程环境下的性能和可编程性。 9. **并发工具类**:JDK 1.8增加了新的并发工具类,如Exchanger用于线程间交换数据,...
8. **并发改进**:JDK 8对Fork/Join框架进行了优化,改进了并发性能,并引入了新的并发工具类,如CompletableFuture,提供了异步编程的高级抽象。 9. **新的编译器优化**:JDK 8的javac编译器在编译过程中进行了...
7. ** Nashorn JavaScript引擎**:Java 8引入了Nashorn JavaScript引擎,允许在Java应用中执行JavaScript代码,实现了Java和JavaScript之间的互操作性。 8. ** 并发改进**:包括Fork/Join框架的改进,以及新的并发...
此外,还增加了对IPv6的全面支持,改进了内存管理和垃圾回收机制,以及增强了并发处理能力,例如Fork/Join框架的引入,它使得多线程编程更为高效。 JDK 1.8是Java发展的一个重要里程碑,它引入了Lambda表达式,这是...