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. 【CF #541 D】 Gourmet choice

    link:https://codeforces.com/contest/1131 题意: 给定一些大小比较,输出排名. 思路: 这道题我用的是拓扑排序,又因为有等于号的存在,我用了并查集. 结束后这道 ...

  2. BZOJ2038 小Z的袜子 莫队

    BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...

  3. Rikka with Prefix Sum(组合数学)

    Rikka with Prefix Sum 题目描述 Prefix Sum is a useful trick in data structure problems. For example, giv ...

  4. 牛客小白赛5 无关(relationship) 容斥原理(计算因子数的模板)

    链接:https://www.nowcoder.com/acm/contest/135/A来源:牛客网 若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关.   给出一个含有k个元素的集 ...

  5. poj 2253 Frogger(floyd变形)

    题目链接:http://poj.org/problem?id=1797 题意:给出两只青蛙的坐标A.B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的.显然从A到B存在至少一条的通路,每一条通路 ...

  6. 2018 Multi-University Training Contest 2(部分题解)

    Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. Spring的事件监听机制

    最近公司在重构广告系统,其中核心的打包功能由广告系统调用,即对apk打包的调用和打包完成之后的回调,需要提供相应的接口给广告系统.因此,为了将apk打包的核心流程和对接广告系统的业务解耦,利用了spr ...

  8. Tomcat原理系列之六:详解socket如何封装成request(上)

    目录 参与者 总结 @(详解socket如何封装成request) 看源码虽然不能马上提升你的编码水平.但能让你更好的理解编程. 因为我们tomcat多是以NIO形式处理请求,所以本系列讲的都是NIO ...

  9. Invalid bound statement(not found):cn.e3mall.mapper.TbItemMapper.selectByExample.....

    1.出现如下问题: 说明mapper接口和mapper.xml映射文件没有在一个文件夹下面 2.解决方法: 在dao层的pom.xml中配置一下: <!-- 如果不添加此节点mybatis的ma ...

  10. docker java环境 直接做成镜像 跑自己的java包

    yum install docker #基于阿里源 可以直接下载 systemctl restart docker ifconfig  #出现 docker0  说明环境部署成功 docker ver ...