zoukankan      html  css  js  c++  java
  • java CountDownLatch 控制异步和同步

    应用场景举例:

      执行A项目的方法,需要调用B项目、C项目、D项目的接口方法。

    需求:

      异步调用B、C、D项目的接口方法,且每个接口都调用结束后,A项目的方法才可以结束。

    注:如果需要获取接口返回结果,可以使用缓存(key,value)保存。线程只支持线程外的静态参数传递,不严谨。

    package com.sze.redis.async;
    
    import java.util.concurrent.CountDownLatch;
    
    public class AsyncTest {
        public static void main(String[] args) throws InterruptedException {
            System.out.println("<=================A项目方法开始==============>");
            CountDownLatch latch = new CountDownLatch(3);
            Thread B = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("B项目接口调用===开始");
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("B项目接口调用===结束");
                    latch.countDown();
                }
            });
            
            Thread C = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("C项目接口调用===开始");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("C项目接口调用===结束");
                    latch.countDown();
                }
            });
            
            Thread D = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("D项目接口调用===开始");
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("D项目接口调用===结束");
                    latch.countDown();
                }
            });
            System.out.println("B C D start");
            B.start();
            C.start();
            D.start();
            latch.await();
            System.out.println("<=================A项目方法结束==============>");
        }
    }

    结果:

    <=================A项目方法开始==============>
    B C D start
    B项目接口调用===开始
    D项目接口调用===开始
    C项目接口调用===开始
    D项目接口调用===结束
    C项目接口调用===结束
    B项目接口调用===结束
    <=================A项目方法结束==============>

    转载于:https://www.cnblogs.com/zwcry/p/9662499.html

  • 相关阅读:
    TCP建立连接和断开连接
    城市三级联动Springmvc+mysql
    JS页面间数据传递的各种方法
    点击Button弹出登陆注册框
    一个多表联合查询引发的思考
    Linq扩展方法获取单个元素
    Visual Studio 常见问题
    格式化asp.net mvc视图页面
    2014上半年度挑战回顾
    2014年上半度年度挑战
  • 原文地址:https://www.cnblogs.com/erlou96/p/13724686.html
Copyright © 2011-2022 走看看