scala的futue和promise
scala的Future表示一个异步操作的结果状态,它持有一个值,在未来的某个之间点可用,该值是异步操作的结果,当异步操作没有完成,那么Future的isCompleted为false,当异步操作完成了且返回了值,那么Future的isCompleted返回true且是success, 如果异步操作没有完成或者异常终止,那么Future的isCompleted也返回true但是是failed.scala的Future有一个重要特性,就是他只能被赋值一次,一旦Future对象被赋值了或者设置为异常,那么它会变成不可变的
package com.joy.lession1import scala.concurrent._importExecutionContext.Implicits.globalobject 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.globalimport 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.Timerimport java.util.TimerTaskimport 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 ...
随机推荐
- rpm 软件包离线安装
1. 插件安装(可选) yum install yum-plugin-downloadonly 2. 只下载不安装(perl 演示) yum install --downloadonly --down ...
- yield关键字用法与解析(C# 参考)
yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...
- 关于urlDecode和tomcat一些源码
1. 看下面源码,找到%号,每次加2,然后将16进制转换为int,也就是%号后两位加2得到16进制,转换为int ) < numChars) && (c=='%')) { ,i+ ...
- FPGA论剑
今天走在街上,听到了久违的<光辉岁月>,想起6月30号那天,街边所有的餐厅.小店都在播放beyond的经典之作,那天是香港殿堂级乐队beyond乐队主唱兼吉他手黄家驹先生的忌日.黄家驹先生 ...
- Avro之一:Avro简介
一.引言 1. 简介 Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件.在Hadoop的其他项目中例如HBase(Ref)和Hiv ...
- casperjs 安装试用
纠结了好久,一直报错, 具体错误信息现在已经忘了,后来看了官网的prerequisite,才知道要安装特定版本或greater 的 phantomjs 和 Python.我这边主要是没装python. ...
- dB2 索引相关
ALTER TABLE "XXXX"."tableA" PCTFREE 20 ; CREATE INDEX "schema"."X ...
- java NIO(转载)
(原文地址:https://zhuanlan.zhihu.com/p/23488863) NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型 ...
- Python Twisted系列教程2:异步编程初探与reactor模式
作者:dave@http://krondo.com/slow-poetry-and-the-apocalypse/ 译者:杨晓伟(采用意译) 这个系列是从这里开始的,欢迎你再次来到这里来.现在我们可 ...
- 第九章 整合Mybatis(待续)
··········