两种方法计算 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
分享到:
相关推荐
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
官方下载链接:https://download.oracle.com/otn/java/jdk/8u251-b08/3d5a2bb8f8d4428bbe94aed7ec7ae784/jdk-8u251-windows-x64.exe 觉得慢的话可以用txt里百度网盘下载,附件为网盘地址和提取码 jdk8 jdk-8u251-...
而 JDK 7 中将会加入的 Fork/Join 模式是处理并行编程的一个经典的方法。虽然不能解决所有的问题,但是在它的适用范围之内,能够轻松的利用多个 CPU 提供的计算资源来协作完成一个复杂的计算任务。通过利用 Fork/...
jdk-7u79-windows-i586.exe JDK7 稳定版 源官方下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
bcprov-jdk15on-154.jar/bcprov-ext-jdk15on-154.jar
jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...
tar xf jdk-7u67-linux-i586_tar_gz.gz -C /usr/local/ ln -s /usr/local/jdk1.7.0_67/ /usr/local/jdk ll /usr/local/ 2.修改环境变量 cat /etc/profile.d/java.sh export JAVA_HOME=/usr/local/jdk export PATH=$...
bcpkix-jdk15on-1.56 好用
jdk-8u201-linux-x64(rpm安装包_安装说明)
jdk-17.0.3.1 (jdk-17_windows-x64_bin.zip)适用于Windows x64 系统 :是 Java SE 平台的最新长期支持版本。根据Oracle 免费条款和条件许可,JDK 17 二进制文件可在生产中免费使用,并可免费重新分发。
由于官方下载jdk现在需登录 找到第三方jdk 用作备份 来源 http://enos.itcollege.ee/~jpoial/allalaadimised/jdk8/ 此外 华为jdk镜像地址 https://repo.huaweicloud.com/java/jdk/
赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.68.pom; 包含翻译后的API文档...
jdk7 jdk-7u80-windows-x64 网盘下载
新特性主要涉及:对于JDK7中Fork/Join并行处理的升级;支持Lambda表达式;添加了Stream API;对于注解的拓展,加入了类型注解、重复注解;在G1回收器中支持字符串去重;内存空间中删除了永久代,引入了元空间。
jdk1.7 64位官方正式版 jdk-7u79-linux-x64.tar.gz
jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...
jdk-7u45-macosx-x64 For Mac
jdk1.7 32位官方正式版 jdk-7u79-windows-i586 项目实际用过
Linux虚拟机安装JDK所需的文件 jdk-8u171-linux-x64.rpm jdk-8u171-linux-x64.tar.gz
1.下载后重命名:jdk-8u281-linux-x64.tar.gz 2.解压 tar -zxvf jdk-8u281-linux-x64.tar.gz 3.配置环境变量:vim /etc/profile 最后添加: export JAVA_HOME=/opt/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$...