zoukankan      html  css  js  c++  java
  • 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:用于有返回结果的任务

    公共抽象类ForkJoinTask是fork/join的基石类。实现了Future接口。可以看成是一个轻量级的Future。

    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

  • 相关阅读:
    操作元素
    CSS3 制作网格动画效果
    网页边栏过渡动画
    超炫的 CSS3 页面切换动画效果
    多种鼠标悬停效果
    各种 SVG 制作单选和多选框动画
    全屏遮罩层效果(10种)
    FancyBox – 经典 Lightbox 效果插件
    CSS3 & SVG 制作钟表
    20种新颖的按钮风格和效果【附源码】
  • 原文地址:https://www.cnblogs.com/ssskkk/p/10784671.html
Copyright © 2011-2022 走看看