java一个大接口拆用多线程方式拆分成多个小接口

问题引入

目的:我们的接口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

转载于:https://www.cnblogs.com/ssskkk/p/10784671.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值