CompletableFuture 打桌球的应用

简介: CompletableFuture 打桌球的应用

CompletableFuture 使用

 

 

@Test
public void billiardTest() throws Exception {
   // 创建点外卖线程:
   CompletableFuture<Boolean> takeaway = CompletableFuture.supplyAsync(() -> {
       System.out.println("开始点外卖");
       try {
           System.out.println("外卖 => 下单");
           Thread.sleep(1000);
           System.out.println("外卖 => 店家接单开始做饭");
           Thread.sleep(10000);
           System.out.println("外卖 => 做饭完成骑手接单");
           Random random = new Random();
           int time = random.nextInt(5);
           Thread.sleep(time * 1000);
           System.out.println("外卖 => 外卖已送达");
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       return true;
   });
   //创建打球线程
   CompletableFuture<Boolean> billiard = takeaway.supplyAsync(() -> {
       System.out.println("开始打桌球");
       //直接用线程的返回值,不用中间变量,防止变量被篡改
       while (!takeaway.getNow(false)) {
           try {
               System.out.println("打球 => 摆球");
               Thread.sleep(1000);
               System.out.println("打球 => 打球");
               Thread.sleep(5000);
               System.out.println("打球 => 打球结束确定输赢");
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
       System.out.println("外卖已到,不再打球");
       return true;
   });
   //打球的结束,依赖外卖,所以这边只需要看打球是否结束来确定是不是开始吃饭
   billiard.thenAccept((param) -> {
       System.out.println("开始吃饭");
   });
   //主线程可以做其它事
   while (true) {
       System.out.println("主线程可以做其它事:" + DateUtil.now());
       Thread.sleep(1000);
   }
}

 

目录
相关文章
|
自然语言处理 测试技术 计算机视觉
ICLR 2024:谁说大象不能起舞! 重编程大语言模型实现跨模态交互的时序预测
【4月更文挑战第22天】**TIME-LLM** 论文提出将大型语言模型重编程用于时序预测,克服数据稀疏性问题。通过文本原型重编码和Prompt-as-Prefix策略,使LLMs能处理连续时序数据。在多基准测试中超越专业模型,尤其在少量样本场景下效果突出。但面临跨领域泛化、模型调整复杂性和计算资源需求的挑战。[论文链接](https://openreview.net/pdf?id=Unb5CVPtae)
265 2
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
存储 SQL 人工智能
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)(下)
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)
|
存储 Python
GEE谷歌地球引擎计算每隔8天的遥感影像数据的平均值
【2月更文挑战第5天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,计算长时间序列遥感影像数据在多年中,在每一个指定天数的时间范围内的平均值的方法~
628 7
GEE谷歌地球引擎计算每隔8天的遥感影像数据的平均值
|
运维 数据挖掘 Python
探索LightGBM:监督式聚类与异常检测
探索LightGBM:监督式聚类与异常检测【2月更文挑战第3天】
285 1
|
机器学习/深度学习 人工智能 计算机视觉
【CVPR小目标检测】- ISNet红外小目标检测
【CVPR小目标检测】- ISNet红外小目标检测
670 1
|
JavaScript API 容器
react-31-路由配置-重定向-404-嵌套路由
路由 是中大型项目不可或缺的 先做一些准备工作2个界面组件 ,便于路由跳转 熟悉一下路由基础
324 0
react-31-路由配置-重定向-404-嵌套路由
MongoDB-聚合操作表达式
字段路径表达式 $<filed>: 使用 $ 来指示字段路径 $<filed>.<sub-field>: 使用 $ 和 . 来指示内嵌文档字段路径
145 0
|
SQL 存储 分布式计算