Future类型的连锁的运用:

  1. 洗脸
  2. 刷牙
  3. 吃早饭
  4. 看电视
  5. 出门

串行:

import scala.concurrent.{Await, Future}
import scala.util.{Failure, Random, Success}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration object FutureDemo extends App { private def washFace: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"washFace Thread: ${Thread.currentThread().getName}")
println("I am washing face")
"washFace"
} private def brushTeeth: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"brushTeeth Thread: ${Thread.currentThread().getName}")
println("I am brushing teeth")
"brushTeeth"
} private def haveBreakfirst: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"haveBreakfirst Thread: ${Thread.currentThread().getName}")
println("I am having Breakfirst")
"haveBreakfirst"
} private def watchTV: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"watchTV Thread: ${Thread.currentThread().getName}")
println("I am watching TV")
"watchTV"
} private def leaveHome: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"leaveHome Thread: ${Thread.currentThread().getName}")
println("I leave Home")
"leaveHome"
} /**
* ******************** For *********************
*/
/**
* Serial
*/ val rs = for {
_ <- brushTeeth
_ <- washFace
_ <- haveBreakfirst
_ <- watchTV
_ <- leaveHome
} yield () Await.result(rs, Duration.Inf)
rs.onComplete({
case Success(x) => println(x)
case Failure(y) => println(y)
}) }

运行结果:

并发:(吃早饭和看电视可以同时进行,次序随机,其他步骤次序保持不变)

  /**
* Concurrent
*/
val rs = for {
_ <- brushTeeth
_ <- washFace
bf = haveBreakfirst
wt = watchTV
_ <- bf
_ <- wt
_ <- leaveHome
} yield ()

运行结果:

流程值传递:

package com.csl.concurrent

import scala.concurrent.{Await, Future}
import scala.util.{Failure, Random, Success}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration object FutureDemo extends App { /**
* Flow
*/ private def brushTeeth: Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"brushTeeth Thread: ${Thread.currentThread().getName}")
println("I am brushing teeth")
"brushTeeth"
} private def washFace(x: String): Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"washFace Thread: ${Thread.currentThread().getName}")
println("I am washing face")
x + "-> washFace"
} private def haveBreakfirst(x: String): Future[String] = Future {
// Thread.sleep(Random.nextInt(3000))
println(f"haveBreakfirst Thread: ${Thread.currentThread().getName}")
println("I am having Breakfirst")
x + "-> haveBreakfirst \n"
} private def watchTV(x: String): Future[String] = Future {
// Thread.sleep(Random.nextInt(3000))
println(f"watchTV Thread: ${Thread.currentThread().getName}")
println("I am watching TV")
x + "-> watchTV \n"
} private def leaveHome(x: String): Future[String] = Future {
Thread.sleep(Random.nextInt(3000))
println(f"leaveHome Thread: ${Thread.currentThread().getName}")
println("I leave Home")
x + "-> leaveHome"
} val rs = for {
btrs <- brushTeeth
wfrs <- washFace(btrs)
bf = haveBreakfirst(wfrs)
wt = watchTV(wfrs)
bfrs <- bf
wtrs <- wt
lhrs <- leaveHome(bfrs + wtrs)
} yield ("\n rs: \n" + lhrs) Await.result(rs, Duration.Inf)
rs.onComplete({
case Success(x) => println(x)
case Failure(y) => println(y)
}) }

运行结果:

Future类型的连锁的运用的更多相关文章

  1. Java线程(七):Callable和Future

    转自:http://blog.csdn.net/ghsau/article/details/7451464 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. C ...

  2. Callable接口、Runable接口、Future接口

    1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线 ...

  3. java并发:获取线程执行结果(Callable、Future、FutureTask)

    初识Callable and Future 在编码时,我们可以通过继承Thread或是实现Runnable接口来创建线程,但是这两种方式都存在一个缺陷:在执行完任务之后无法获取执行结果.如果需要获取执 ...

  4. 【Java线程】Callable和Future

    Future模式 Future接口是Java线程Future模式的实现,可以来进行异步计算. Future模式可以这样来描述: 我有一个任务,提交给了Future,Future替我完成这个任务.期间我 ...

  5. Runnable、Callable、Future和FutureTask用法

    http://www.cnblogs.com/dolphin0520/p/3949310.html java 1.5以前创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable ...

  6. java并发编程--Runnable Callable及Future

    1.Runnable Runnable是个接口,使用很简单: 1. 实现该接口并重写run方法 2. 利用该类的对象创建线程 3. 线程启动时就会自动调用该对象的run方法 通常在开发中结合Execu ...

  7. Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

    1. 引子 初学Java多线程,常使用Thread与Runnable创建.启动线程.如下例: Thread t1 = new Thread(new Runnable() { @Override pub ...

  8. SDP(13): Scala.Future - far from completion,绝不能用来做甩手掌柜

    在前面几篇关于数据库引擎的讨论里很多的运算函数都返回了scala.Future类型的结果,因为我以为这样就可以很方便的实现了non-blocking效果.无论任何复杂的数据处理操作,只要把它们包在一个 ...

  9. Future学习

    接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果.        Callable接口类似于Runnable,从名字就可以看出来了,但 ...

随机推荐

  1. Different Integers 牛客网暑期ACM多校训练营(第一场) J 离线+线状数组或者主席树

    Given a sequence of integers a1, a2, ..., an and q pairs of integers (l 1, r1), (l2, r2), ..., (lq, ...

  2. codeforces 161 D. Distance in Tree(树形dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...

  3. 51NOD---逆序对(树状数组 + 归并排序)

    1019 逆序数  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称 ...

  4. 【Offer】[46] 【把数字翻译成字符串】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串: 0翻译成"a",1翻译成"b",..... 1 ...

  5. Linux基础提高_sudo,行为审计,跳板机

    sudo 临时给普通用户赋予root权限的一种方式 echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >>/etc/ ...

  6. 对JDBC的使用理解

    JDBC,即Java连接数据库,是java针对数据库操作的一套API,使用JDBC对数据库进行操作时分为以下几步: 1.加载数据库驱动类 Class.forName("com.mysql.j ...

  7. 致初学者(二): HDU 2014~ 2032题解

    下面继续给出HDU 2014~2032的AC程序,供大家参考.2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”. HDU 2014:青年歌手大奖赛_ ...

  8. FreeSql (二十八)事务

    FreeSql实现了四种数据库事务的使用方法,脏读等事务相关方法暂时未提供.主要原因系这些方法各大数据库.甚至引擎的事务级别五花八门较难统一. 事务用于处理数据的一致性,处于同一个事务中的操作是一个U ...

  9. 基于 VMware 的超融合, 解析 vSAN 与 SmartX ZBS 的优劣差异

    在企业级IT领域从业多年,最近越来越多地听到圈内人谈论起超融合技术的种种好处.的确,超融合技术已越来越走向成熟,带来的价值也逐渐凸显.它可靠性高,资源消耗低,尤其是运维部署非常便捷.在企业基础架构领域 ...

  10. 最大公共子序列(Runtime faster than 92.73% of Python3)

    其中的算法思想只是较为简单的动态规划,过去各种各样的考试写过很多次C/C++版本的,最近开始用Python做leetcode中的题目时遇到了该题目,很常规的做法竟然得到了意想不到的速度,但内存占用较差 ...