scala的futue和promise
scala的Future表示一个异步操作的结果状态,它持有一个值,在未来的某个之间点可用,该值是异步操作的结果,当异步操作没有完成,那么Future的isCompleted为false,当异步操作完成了且返回了值,那么Future的isCompleted返回true且是success, 如果异步操作没有完成或者异常终止,那么Future的isCompleted也返回true但是是failed.scala的Future有一个重要特性,就是他只能被赋值一次,一旦Future对象被赋值了或者设置为异常,那么它会变成不可变的
package com.joy.lession1
import scala.concurrent._
importExecutionContext.Implicits.global
object FutureTestextendsApp{
val s ="Hello"
val f:Future[String]= future {
s +" future!"
}
f onSuccess {
case msg => println(msg)
}
println(s)//不加这句, f onSuccess就不执行
}
import scala.concurrent._
importExecutionContext.Implicits.global
import scala.util.{Failure,Success,Try}
object FutureTestextendsApp{
val s ="Hello"
val f:Future[String]= future {
s +" future!"
}
f onComplete {
caseSuccess(t)=>
{
println(t)
}
caseFailure(e)=>
{
println(s"An error has occured: $e.getMessage")
}
}
println("dd")
}
import java.util.Timer
import java.util.TimerTask
import scala.concurrent._
object TimedEvent{
val timer =newTimer
/** Return a Future which completes successfully with the supplied value after secs seconds. */
def delayedSuccess[T](secs:Int, value: T):Future[T]={
val result =Promise[T]
timer.schedule(newTimerTask(){
def run()={
result.success(value)
}
}, secs *1000)
result.future
}
/** Return a Future which completes failing with an IllegalArgumentException after secs
* seconds. */
def delayedFailure(secs:Int, msg:String):Future[Int]={
val result =Promise[Int]
timer.schedule(newTimerTask(){
def run()={
result.failure(newIllegalArgumentException(msg))
}
}, secs *1000)
result.future
}
scala的futue和promise的更多相关文章
- 编写并发程序 Inversion
做完了 scala parallel 课程作业后,觉得 scala 写并发程序的便捷性是 java 永远都追不上的.scala 的Future 和 Promise,java 里 Future 和 Co ...
- Netty http client 编写总结
Apache http client 有两个问题,第一个是 apache http client 是阻塞式的读取 Http request, 异步读写网络数据性能更好些.第二个是当 client 到 ...
- Monad 在实际开发中的应用
版权归作者所有,任何形式转载请联系作者. 作者:tison(来自豆瓣) 来源:https://www.douban.com/note/733279598/ Monad 在实际开发中的应用 不同的人会从 ...
- Scala教程之:Future和Promise
文章目录 定义返回Future的方法 阻塞方式获取Future的值 非阻塞方式获取Future的值 Future链 flatmap VS map Future.sequence() VS Future ...
- Effective Scala
Effective Scala Marius Eriksen, Twitter Inc.marius@twitter.com (@marius)[translated by hongjiang(@ho ...
- Scala 并行和并发编程-Futures 和 Promises【翻译】
官网地址 本文内容 简介 Futures 阻塞 异常 Promises 工具 最近看了<七周七语言:理解多种编程泛型>,介绍了七种语言(四种编程范型)的主要特性:基本语法,集合,并行/并发 ...
- 一步步实现Promise
最近在https://github.com/ThoughtWorksInc/rest-rpc上工作,遇到了一个scala隐式转换的问题,简单的说是要实现这么个东西: implicit def json ...
- 为Play初学者准备的Scala基础知识
1 前言 本文的主要目的是为了让Play Framework的初学者快速了解Scala语言,算是一篇Play Framework的入门前传吧.使用PlayFramework可以极大的提高开发效率,但是 ...
- scala-Future和Promise
首先说明同步与异步,阻塞与非阻塞的问题: Asynchronous vs. Synchronous A method call is considered synchronous if the cal ...
随机推荐
- avalon 总线时序关系理解
对于读,等待时间指的是从端口捕获数据的时间相对于read信号的延时 建立时间指的是read信号相对于chipselect和addr的延时时间 对于写,等待时间指的是相对于非等待情况下各个信号的延时时间 ...
- Yii框架的一些系统函数
Yii::app()->request->baseUrl 返回app所在目录,可以用来挂模板. var_dump(Yii::app()->db); 可以用来测试数据库配置成功否
- PowerHA完全手册(二)
http://www.aixchina.net/home/space.php?uid=1006&do=blog&id=40117 第二部分--安装配置篇2.1. 准备2.1.1. 安装 ...
- Linux下的Memcache安装,启动
一.linux安装memcache 1. 如果通过下载源码进行安装,则需要下载最新版本http://memcached.googlecode.com/files/memcached-1.4.13.ta ...
- mina中责任链模式的实现
一.mina的框架回顾 责任链模式在mina中有重要的作用,其中Filter机制就是基于责任链实现的. 从上图看到消息的接受从IoService层先经过Filter层过滤处理后最后交给IoHander ...
- Vue.js:样式绑定
ylbtech-Vue.js:样式绑定 1.返回顶部 1. Vue.js 样式绑定 Vue.js class class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v- ...
- 1024 Palindromic Number
题意: 给出一个数N(N<=10^10),最多可操作K次(K<=100),每次操作为这个数和其反转之后的数相加,若得到的结果为回文数,则输出:若在K次迭代后仍然不是回文数,在输出第K次操作 ...
- sublime3环境配置
首先安装package control 按ctrl+`调出控制台,输入以下代码 import urllib.request,os; pf = 'Package Control.sublime-pack ...
- IDA Pro 权威指南学习笔记(五) - IDA 主要的数据显示窗口
在默认配置下,IDA(从 6.1 版开始)会在对新二进制文件的初始加载和分析阶段创建 7 个显示窗口 3 个立即可见的窗口分别为 IDA-View 窗口.函数窗口和消息输出窗口 可以通过 View - ...
- C#使用protobuf
C# protobuf的使用方法 通过.proto文件导出C#支持的.cs类文件 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.googl ...