标签:over ati thread 接口 oid desc cte 博客 exec
Fork/Join将大任务切分成小任务来分治运算,fork分join合。 一般直接使用ForkJoinTask的子类RecursiveTask。
package JavaCore.MultiThread.advanced.ForkJoin;
import java.util.concurrent.*;
/*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: Fibonacci
* @Author: liufei32@outlook.com
* @Date: 2019/3/13 12:34
* @Description: Fibonacci的分治实现
* @Aha-eureka: 一般斐波那契都是使用递归来写,其实这里使用分治效果会更好,因为可以使用多线程同时运算
*******************************************************************************/
public class Fibonacci extends RecursiveTask<Long> {
final int n;
Fibonacci( int n ) {
this.n = n;
}
@Override
protected Long compute() {
if (n <= 1) {
return 1L;
} else {
Fibonacci f1 = new Fibonacci(n - 1);
Fibonacci f2 = new Fibonacci(n - 2);
f1.fork();//进行分治运算
return f2.compute() + f1.join();//join拿到结果
/** 也可以这么写,但很明显上面的写法更加简洁
Fibonacci f1 = new Fibonacci(n - 1);
Fibonacci f2 = new Fibonacci(n - 2);
f1.fork();
f2.fork();
return f1.join() + f2.join();
*/
}
}
public static void main( String[] args ) {
Fibonacci fibonacci = new Fibonacci(5);
ForkJoinPool forkJoinPool = new ForkJoinPool();
Future<Long> future = forkJoinPool.submit(fibonacci);
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com
标签:over ati thread 接口 oid desc cte 博客 exec
原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10669948.html