问题引入
目的:我们的接口A 分别调用了a1 a2 a3 三个接口,最终返回值是 a1的返回值+a2的返回值+a3的返回值
如果同步执行 a1 a2 a3 然后结果相加 很慢 。
如果异步执行 无法控制 三个线程同时执行完毕后 在结束此方法。
解决办法
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架
1.ForkJoinTask:我们要使用Fork/Join框架,首先需要创建一个ForkJoin任务。该类提供了在任务中执行fork和join的机制。通常情况下我们不需要直接集成ForkJoinTask类,只需要继承它的子类,Fork/Join框架提供了两个子类:
a.RecursiveAction:用于没有返回结果的任务
b.RecursiveTask:用于有返回结果的任务
2.ForkJoinPool:ForkJoinTask需要通过ForkJoinPool来执行
Fork/Join和Callable/FutureTask类似
一个简单的demo:
@Test public void testMybatis(){ RecursiveTask<Object> recursiveTask = new RecursiveTask<Object>() { @Override protected Object compute() { return "你"; } }; RecursiveTask<Object> recursiveTask2 = new RecursiveTask<Object>() { @Override protected Object compute() { return "们"; } }; RecursiveTask<Object> recursiveTask3 = new RecursiveTask<Object>() { @Override protected Object compute() { return "好"; } }; forkJoinPool.execute(recursiveTask); forkJoinPool.execute(recursiveTask2); forkJoinPool.execute(recursiveTask3); Object join = recursiveTask.join(); Object join2 = recursiveTask2.join(); Object join3 = recursiveTask3.join(); System.err.println("最终结果==="+join+join2+join3); }
打印结果:你们好
这里只写了demo。至于原理这篇博客写的很不错了:https://www.cnblogs.com/senlinyang/p/7885964.html