两种方法计算 Fibonacci
package jdk7;
import java.util.concurrent.RecursiveAction;
import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;
public class Fibonacci extends RecursiveTask<Long>{
final int n;
Fibonacci(int n) {
this.n = n;
}
private Long compute(int small) {
final Long[] results = { 1l, 1l, 2l, 3l, 5l, 8l, 13l, 21l, 34l, 55l, 89l };
return results[small];
}
public Long compute() {
if (n <= 10) {
return compute(n);
}
// 分别计算每个 列表的 数据
// Fibonacci f1 = new Fibonacci(n - 1);
// Fibonacci f2 = new Fibonacci(n - 2);
//// System.out.println("fork new thread for " + (n - 1));
// f1.fork();
//// System.out.println("fork new thread for " + (n - 2));
// f2.fork();
// return f1.join() + f2.join();
Fibonacci f1 = new Fibonacci(n - 1);
f1.fork();
Fibonacci f2 = new Fibonacci(n - 2);
return f2.compute() + f1.join();
}
//非递归实现
public Long sum() {
long f1 = 1, f2 = 1;
long m = 0;
if (n <= 2) {
return 1l;
} else {
for (int i = 3; i <= n; i++) {
m = f1 + f2;
f2 = f1;
f1 = m;
}
return m;
}
}
public static void main(String args[]) throws InterruptedException, ExecutionException{
// Fibonacci f = new Fibonacci(100);
//
// long t1 = new Date().getTime();
// Integer i = f.compute();
// long t2 = new Date().getTime();
// System.out.println(i+"耗时:"+(t2-t1));
long t1 = new Date().getTime();
ForkJoinTask<Long> fjt = new Fibonacci(41);
ForkJoinPool fjpool = new ForkJoinPool();
fjpool.execute(fjt);
Long resultInt = fjt.get();
long t2 = new Date().getTime();
Long j = new Fibonacci(42).sum();
long t3 = new Date().getTime();
System.out.println(resultInt+"耗时:"+(t2-t1));
System.out.println(j+"耗时:"+(t3-t2));
}
}
结果如下:
fork/join 性能不如 for循环
267914296耗时:417
267914296耗时:0
分享到:
相关推荐
例如,Fork/Join框架和Parallel Streams使得多线程并行计算变得更加简单和高效。 在Linux环境下,安装JDK 1.8通常涉及解压`jdk-8u261-linux-x641`这样的压缩包,然后设置`JAVA_HOME`环境变量,并将`bin`目录添加到`...
3. 并发工具加强:提供新的并发API,如Fork/Join框架,用于并行计算,以及`ConcurrentHashMap`的增强。 4. 文件系统API(NIO.2):提供了一种新的、更现代的方式来访问和操作文件系统,包括文件路径、文件属性和...
在并发编程领域,JDK7引入了Fork/Join框架,这是一种并行计算模型,适用于那些可以拆分为更小子任务的问题,例如在大量数据处理中,能显著提升性能。 JDK7还对垃圾回收机制进行了优化,包括G1(Garbage-First)垃圾...
Java 7(也称为JDK 7或Java SE 7)是一个重要的版本,它引入了许多新特性,提升了开发效率和性能。以下是一些关键的Java 7特性: 1. **多 Catch 语句**:在Java 7之前,捕获异常时需要分别编写多个catch块,但Java ...
**Java Development Kit (JDK) 7 安装详解** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的软件包。在Java编程中,JDK是不可或缺的组成部分,它包含了编译器、Java运行环境、调试...
7. **Fork/Join框架**:为并行计算提供了Fork/Join框架,利用多核处理器优势提高程序执行效率。 8. **动态语言支持**:通过JSR 292,Java 7引入了“ invokedynamic ”指令,支持更多动态语言运行在Java虚拟机上,如...
3. **多线程并行流**:Java 7引入了Fork/Join框架和并行流API,提供了处理大量数据的并行计算能力,提高了数组和集合操作的效率,如并行排序。 4. **钻石运算符**:在创建匿名内部类或使用泛型时,可以省略掉类型...
8. **语法糖**:JDK7引入了一些新的语法糖,比如在for循环中可以同时遍历Map的键和值,使得代码更加简洁。 9. **元空间(MetaSpace)**:代替了原来的永久代(Permanent Generation),用于存储类和方法的元数据,...
7. **语法糖**:包括改进的for循环(增强的for-each),可以遍历数组和集合,使得代码更加简洁。 JDK 7u60作为Java 7的一个更新,可能包含以下改进: - 安全性更新:修复了已知的安全漏洞,保护系统免受恶意攻击。...
在并发编程方面,JDK 7 增加了Fork/Join框架,它是Java Concurrency API的一部分,用于执行并行任务。它基于分治策略,将大任务分解为小任务并并行处理,从而提升程序性能。 Javadoc也进行了升级,支持HTML5和CSS3...
2. **多路归并排序(Fork/Join Framework)**:这是一个并行处理框架,利用了Java的并发库,可以将大型任务拆分为小任务,以实现高效的并行执行。 3. **字符串切换(Switch Statement with Strings)**:允许在...
7. **Fork/Join框架**:这是一个并行计算框架,允许将大任务分解为小任务并行执行,提高了程序的执行效率。 8. **改进的异常处理**:JDK7允许在finally块中return,这在某些情况下可以简化代码。 9. **改进的...
5. **并发编程改进**:如`ConcurrentHashMap`和`Fork/Join`框架,提高了多线程环境下程序的性能。 然而,随着时间的推移,Java已经发展到了更新的版本,比如JDK 8、JDK 11和JDK 17等,它们带来了更多新功能和性能...
对于`多线程编程`,JDK 7提供了`Fork/Join框架`,这是一个用于并行执行任务的框架,适用于分解大任务为小任务进行并行处理。这个框架利用了工作窃取算法,有效提高了计算密集型任务的执行效率。 在`数组操作`上,...
- **Fork/Join框架**:这是一个并行编程模型,用于提升多核处理器上的计算性能。它通过将大任务分解成小任务,利用工作窃取算法来实现并行执行。 - **动态类型语言支持**:通过JSR 292(Method Handles and ...
6. **Fork/Join框架**:用于并行计算,提高程序运行速度,特别是在多核处理器环境下。 7. **动态语言支持**:引入了JSR 292,使得Java虚拟机(JVM)能够支持更多动态语言。 这两个版本的JDK反映了Java技术的发展...
- **Multithreaded Fork/Join Framework**:提供了更高效的并行计算框架,通过ForkJoinPool和RecursiveTask实现。 - **Project Coin**:一系列小的语法改进,比如改进的for-each循环、方法引用等。 总的来说,JDK ...
4. **并发与多线程**:Java 7引入了Fork/Join框架,通过工作窃取算法,优化了并行计算性能。此外,`ConcurrentHashMap`的实现也得到了增强,提高了并发访问的效率。 5. **NIO.2**:Java 7引入了New I/O 2(NIO.2)...
7. **改进的for-each循环**: 可以遍历数组和集合的子范围,如`for (int i : array.subArray(start, end))`。 8. **改进的语法糖**: 如方法引用和构造函数引用,简化Lambda表达式。 9. **Fork/Join框架**: 提供了一...