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);
}
}
CompletableFuture 打桌球的应用的更多相关文章
- 用Canvas写桌球游戏!!!
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 昨天上班的时候闲着无事,就用Canvas写了个桌球游戏来玩玩....所以就拿这游戏上来水一发.或许对一些刚学canvas的人有帮助. 话说 ...
- 用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器
平时不怎么玩游戏,有时消遣就玩玩QQ里的2D桌球,但是玩的次数少,不能像骨灰级玩家一样百发百中,肿么办呢?于是某天突发奇想,决定自己也来做个“外挂”.说是外挂,其实只是一个瞄准器,毕竟外挂是修改别人的 ...
- Java CompletableFuture 详解
Future是Java 5添加的类,用来描述一个异步计算的结果.你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执 ...
- 多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
目录 1.Futrue 2.FutureTask 3.CompletionService 4.CompletableFuture 5.总结 ================正文分割线========= ...
- CompletableFuture CompletableFuture.supplyAsync 异常处理
CompletableFuture 异常处理completeExceptionally可以把异常抛到主线程 /** * User: laizhenwei * Date: 2018-01-30 Time ...
- 使用CompletableFuture实现异步编程
在开发中会碰到一种场景,如下 Object result1 = service1.func1();//执行80ms Object result2 =service2.func2();//执行50ms ...
- CompletableFuture基本用法
异步计算 所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法.在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结 ...
- 使用CompletableFuture优化你的代码执行效率
这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例. 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明 ...
- 多线程编程CompletableFuture与parallelStream
一.简介 平常在页面中我们会使用异步调用$.ajax()函数,如果是多个的话他会并行执行相互不影响,实际上Completable我理解也是和它类似,是java 8里面新出的异步实现类,Completa ...
- 从CompletableFuture到异步编程设计
从CompletableFuture到异步编程设计,笔者就分为2部分来分享CompletableFuture异步编程设计,前半部分总结下CompletableFuture使用实践,后半部分分享下Com ...
随机推荐
- JUC并发编程学习笔记(十二)Stream流式计算
Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合.MySql这些的本质都是存储东西的: 计算都应该交给流来操作! 一个案例说明:函数式接口.lambda表达式.链式编程.St ...
- 【scipy 基础】--图像处理
SciPy库本身是针对科学计算而不是图像处理的,只是图像处理也包含了很多数学计算,所以Scipy也提供了一个专门的模块ndimage用于图像处理. ndimage模块提供的功能包括输入/输出图像.显示 ...
- 2022.7.13 tongyf 讲课纪要
前言 这个笔记记晚了,主要是都在跟 \(LCT\) 进行殊死搏斗,所以博客这方面就挂了很久. tongyf 学长当年是拿到省一之后省选炸了,之后暴切高考.ORZ%%% 这节课讲的是线性dp和背包dp, ...
- 使用Tensorrt部署,C++ API yolov7_pose模型
使用Tensorrt部署,C++ API yolov7_pose模型 虽然标题叫部署yolov7_pose模型,但是接下来的教程可以使用Tensorrt部署任何pytorch模型. 仓库地址:http ...
- 数据分析人员需要掌握sql到什么程度?
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准化语言,对于数据分析人员来说,掌握SQL是至关重要的. 在本文中,我们将详细探讨数据分析人员需要掌握SQL ...
- Nginx服务器常用参数设置
Nginx作为一个高性能的Web服务器和反向代理,它的性能可以通过调整底层操作系统的参数来进一步优化.以下是一些常见的操作系统级别的调整,通常针对Linux系统: File Descriptors L ...
- navicat连接服务器mysql
navicat连接服务器mysql 第一步:配置防火墙 连接服务器的mysql数据库,我们首先需要在服务器上放行3306端口(MySQL服务对应的端口),进入服务器管理页面防火墙,点击添加规则,放行3 ...
- 在终端输入EOF
在终端输入EOF 问题 如下是一个计算校验和的程序,其中使用了while循环,需要在标准输入中读取到EOF才能跳出循环. #include <stdio.h> int main(){ in ...
- CIDR技术划分和计算
CIDR:无类域间路由 由于早期的IP地址的划分会浪费太多的IP地址,所以,现在都是用CIDR表示法,为此引入了子网掩码的概念,即网络位的个数可以任意指定.该方法兼容早期的IP划分方法. CIDR表示 ...
- ChatGPT的中转站 oupuapi,不扶墙也能上楼
我们在建类似 chatgpt 聊天站点的时候,只需对服务器进行扶墙代理,便可实现访问. 那么我们只需要往深里想一下,不要让整个服务器去访问 VPN,而是基于 API 的代理,或者说 API 的中转站也 ...