java CountDownLatch 控制异步和同步

应用场景举例:java

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

需求:缓存

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

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

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项目方法结束==============>"); } }

结果ide

<=================A项目方法开始==============>
B C D start
B项目接口调用===开始
D项目接口调用===开始
C项目接口调用===开始
D项目接口调用===结束
C项目接口调用===结束
B项目接口调用===结束
<=================A项目方法结束==============>
相关文章
相关标签/搜索