Java 使用CountDownLatch实现网络同步请求,异步同时获取商品信息组装

Posted 抓手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 使用CountDownLatch实现网络同步请求,异步同时获取商品信息组装相关的知识,希望对你有一定的参考价值。

CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。

这里是使用CountDownLatch和多线程完成商品信息异步组装:

import java.time.LocalDateTime;
import java.util.StringJoiner;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
/**
 * @author 向振华
 * @date 2023/01/04 14:01
 */
public class Test 
 
    public static void main(String[] args) 
 
        // 创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);
 
        CountDownLatch countDownLatch = new CountDownLatch(3);
 
        System.out.println("开始 " + LocalDateTime.now());
 
        StringJoiner sj = new StringJoiner("、");
 
        // 线程1
        executorService.execute(() -> 
            try 
                String do1 = do1();
                sj.add(do1);
             catch (Exception e) 
                e.printStackTrace();
             finally 
                countDownLatch.countDown();
            
        );
 
        // 线程2
        executorService.execute(() -> 
            try 
                String do2 = do2();
                sj.add(do2);
             catch (Exception e) 
                e.printStackTrace();
             finally 
                countDownLatch.countDown();
            
        );
 
        // 线程3
        executorService.execute(() -> 
            try 
                String do3 = do3();
                sj.add(do3);
             catch (Exception e) 
                e.printStackTrace();
             finally 
                countDownLatch.countDown();
            
        );
 
        try 
            countDownLatch.await();
         catch (InterruptedException e) 
            e.printStackTrace();
        
 
        System.out.println(sj.toString());
        System.out.println("完成 " + LocalDateTime.now());
    
 
    private static String do1() 
        try 
            Thread.sleep(1000);
         catch (InterruptedException e) 
            e.printStackTrace();
        
        System.out.println("1查询商品规格信息");
        return "商品规格";
    
 
    private static String do2() 
        try 
            Thread.sleep(5000);
         catch (InterruptedException e) 
            e.printStackTrace();
        
        System.out.println("2查询商品价格信息");
        return "商品价格";
    
 
    private static String do3() 
        try 
            Thread.sleep(3000);
         catch (InterruptedException e) 
            e.printStackTrace();
        
        System.out.println("3查询商品图片信息");
        return "商品图片";
    

输出结果:

开始 2023-01-04T14:16:40.441
1查询商品规格信息
3查询商品图片信息
2查询商品价格信息
商品规格、商品图片、商品价格
完成 2023-01-04T14:16:45.468

以上是关于Java 使用CountDownLatch实现网络同步请求,异步同时获取商品信息组装的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程之---用 CountDownLatch 说明 AQS 的实现原理

java多线程对CountDownLatch的使用实例

Java并发编程--CountDownLatch

Java CountDownLatch解析(下)

concurrent并发包之CountDownLatch

CountDownLatch的原理学习