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项目方法结束==============>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM