一篇文章就能搞懂的响应式编程

本文通过实例介绍了响应式编程在并发任务中的应用,通过代码展示如何将两个独立线程的结果合并,实现效率提升。使用响应式编程,可以将线程1的5秒、线程2的4秒和线程3的3秒总耗时减少到1002毫秒,清晰的代码逻辑便于理解。
废话不多少说先看一下边着个代码,一看就懂, 在一个main方法里边有一个业务一假设需要1000毫秒完成,还有一个业务二需要800毫秒完成
然后 业务一拿到结果,业务二拿到结果合并,之后把result返回 
public static void main(String[] args) throws InterruptedException, ExecutionException {
    long start = System.currentTimeMillis();

    String v1 = "业务一 完成需要1000毫秒";
    Thread.sleep(1000);

    String v2 = "业务二 完成需要800毫秒";
    Thread.sleep(800);


    String result = v1 + v2;

    System.out.println(result);//v1结果加v2结果返回
    long end = System.currentTimeMillis();
    System.out.println("总计完成时间 :"+(end-start));
}

我们测一下时间大约需要1801左右

我们为了提升业务效率,用多线成区处理,业务一开一个线程 业务二开一个线程这样 就提升效率了,但是 我们这里有一个要求就是 必须业务一结果和业务二结果合并才可以 然后把结果返回,这里就需要响应式了

如何做直接上代码

public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService threads = Executors.newFixedThreadPool(10); //建立线程池
    long start = System.currentTimeMillis();

    Callable<String> queryCall = new Callable<String>() {
        @Override
        public String call() throws Exception {
            String callv1 = "业务一 完成需要1000毫秒";
            Thread.sleep(1000);
            return callv1;
        }
    };

    Callable<String> queryCall2 = new Callable<String>() {
        @Override
        public String call() throws Exception {
            String callv2 = "业务二 完成需要800毫秒";
            Thread.sleep(800);
            return callv2;
        }
    };
    FutureTask<String> futureTaskCall = new FutureTask<>(queryCall);
    FutureTask<String> futureTaskCall2 = new FutureTask<>(queryCall2);

    //new Thread(futureTaskCall).start();
   // new Thread(futureTaskCall2).start();
  //从线程池抽线程
   threads.submit(futureTaskCall);
   threads.submit(futureTaskCall2);
    
    //FutureTask的get()方法是阻塞式它在这里阻塞等待这个线程执行完并且拿到返回值之后在取消阻塞状态
    String v1 = futureTaskCall.get();//获取值任务一的值
    String v2 = futureTaskCall2.get();//获取值任务二的值
    String result = v1 + v2;
    System.out.println(result);//v1结果加v2结果返回
    long end = System.currentTimeMillis();
    System.out.println("总计完成时间 :"+(end-start));
}

看了马总共用时 1002毫秒是不是快了不少吧!  代码写的很清楚 一定能看懂 

这种写法叫接口聚合, 线程1 消耗 5秒  线程2 消耗 4秒 线程3 消耗3秒那么总时间一定式 小于6+4+3的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值