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);
   }
}

 

目录
相关文章
|
5月前
|
缓存 Java Maven
CompletableFuture
【7月更文挑战第29天】
53 4
|
5月前
|
Java 开发者 Spring
CompletableFuture 使用总结
CompletableFuture 使用总结
151 1
|
4月前
|
Java 测试技术
CompletableFuture 使用
CompletableFuture 使用
60 0
|
7月前
|
Java API
java多线程之FutureTask、Future、CompletableFuture
java多线程之FutureTask、Future、CompletableFuture
316 0
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
78 0
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
63 0
JUC--CompletableFuture下
简单介绍CompletableFuture
|
Java Linux
JUC--CompletableFuture上
Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果,取消任务带带执行,判断任务是否被取消,判断任务执行是否完毕等。
|
Java 测试技术
CompletableFuture使用详解
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口
280 0
CompletableFuture使用详解