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实现网络同步请求,异步同时获取商品信息组装的主要内容,如果未能解决你的问题,请参考以下文章