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项目方法结束==============>
  • 相关阅读:
    STL之rb_tree的find函数
    Ruby对象、变量和常量
    Welcome to the Real World
    Git经常使用命令
    Android休眠唤醒机制简介(一)【转】
    DirectFB学习之移植到nuc972平台 标签: DirectFBlinux图形加速驱动【转】
    Buildroot构建指南——工具链【转】
    深入浅出
    android 添加一个按键键值【转】
    Android系统升级那些事儿【转】
  • 原文地址:https://www.cnblogs.com/zwcry/p/9662499.html
Copyright © 2011-2022 走看看