Scala语言入门05
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//为参数添加注解
Scala支持多注解,且注解次序没有影响 ➢ @BeanProperty @Id var username = _
部分注解需要引入参数,Scala支持任意类型作为注解参数 ➢ @Test( timeout = 100 ) def testA() = { ... }
Scala语言入门
杨勇
注解语法
给主构造器添加注解时,需要将注解放置在构造器之前,并加上一对圆括号 ➢ class Credentials @Inject() (var username: String, var password: String)
为表达式添加注解,在表达式后加上冒号,然后是注解 ➢ (myMap.get(key): @unchecked) match { ... }
杨勇
注解语法
Scala可以为任意的结构代码甚至是参数添加注解
➢ @deprecated def Sum() = { ... }
//为方法添加注解
➢ @deprecated class IntStack { ... }
//为类添加注解
➢ def check(@NotNull password:String)
利用actor方法声明使用 ➢ val hi = actor { receive { ... } } ➢ val hello = Array.fill()( actor { react { case _ => } } )
Scala语言入门
杨勇
Actor
消息传递是Actor的核心 ➢ 使用!向actor发送信息 ➢ actor使用receive接收信息 ➢ msg代表actor当前接收到的信息
Scala语言入门
杨勇
Actor使用原则
避免共享 不调用方法 足够简单 异步调用 使用react 容错
Scala语言入门
杨勇
更深入学习Scala
XML处理 与JAVA的互操作 Scaladoc 并发模型 深入学习Akka类库的特性
学习阅读Scala的外语参考书,如 ➢ 《Actors in Scala》 ➢ 《Scala Cookbooks》
课后作业1: 了解并尝试使用一些课堂上并没有讲到的注解,并给出使用实例,说明该注解的意义
Scala语言入门
杨勇
Actor与并发
并发 actor ➢ 创建与使用 ➢ 消息的传递 ➢ 线程的使用 ➢ actor风格 应用实例
Scala语言入门
杨勇
并发
什么是并发 ➢ 将一个计算任务,分成几个小的部份,让它们同时被计算,之后再汇整计算结果
易变字段 @volatile ➢ 标示相关变量将会被多个线程使用,使得多线程访问具有预见性
自动的get/set方法对 @scala.reflect.BeanProperty
➢ 添加该注解将会在编译时自动产生对应的get/set方法,注意不能在同一时间编译的代 码中调用注解字段的get/set方法
为类型参数添加注解 ➢ class MyContainer[@specialized T]
针对实际类型的注解应放置在类型名称之后 ➢ String @cps[Unit]
Scala语言入门
杨勇
注解举例
Scala拥有若干个标准注解 废弃 @deprecated ➢ 标示某段代码(方法或类)不提倡使用,调用该段代码将会收到废弃警告
不例
生成跳转表 @switch ➢ (m : @switch) match { ➢ case 0 => ... ➢ case 1 => ... ➢ case 2 => ... }
基本类型特殊化 @specialized ➢ def sum[@specialized(Int , Double) T] = { ... }
Scala语言入门
杨勇
Actor
使用actor需要引入Scala的Actor类库 ➢ import scala.actors.Actor ➢ import akka.actor.Actor
继承Actor以使用 ➢ class HI extends Actor ➢ object HELLO extends Actor
Scala使用Actor作为其并发编程模型 ➢ 一种基于消息传递而非资源共享的并发模型,能尽可能避免死锁和共享状态 ➢ actor可以理解为虚拟线程,能实现线程的复用,从而产生数百上千的actor并有效控制
系统开销
Scala在2.10.0版本之后在自带Akka类库作为其Actor推荐实现 ➢ Akka是使用Scala编写的实现Actor模型的一个类库 ➢ Akka包括了大量的工具去完善、辅助并发开发
Scala语言入门
杨勇
Thanks
FAQ时间
对于信息,actor往往使用模式匹配来进行处理,而对于消息的发送者而言,其并不关 心actor接收到信息后如何处理,更不期待actor对该信息有返回,当消息发送后,发送 者便处理下一步
receive方法的参数有各种case语句组成,receive方法获取到消息后依次传递给其参数 ,那么,receive方法的case语句需要考虑所有情况吗?
Scala语言入门
Scala语言入门 第5周
杨勇
Scala语言入门
注解 ➢ 能被编译器或外部工具处理的一些信息
Actor和并发 ➢ 一种便于使用的并发模型,是scala用于大数据处理的结构基础
Scala语言入门
杨勇
注解
为什么使用注解 注解语法 注解举例
Scala语言入门
杨勇
为什么使用注解
Scala语言入门
杨勇
Actor
actor通过react实现线程的复用 ➢ receive从线程池获取一个线程并一直使用,react从线程池获取一个线程,使用完释放 ➢ def act( ) { react { ... } }
actor(Scala.Actor)的主体为act方法,act方法不能被外部显式调用 ➢ actor的act方法在start后启动,act方法本身并不会自动获取线程 ➢ 在act方法里只能获取一次线程 ➢ 在以下情况下actor终止执行act方法 • act方法返回 • act方法由于异常被禁止 • actor调用exit方法
常见的并发结构 ➢ 多线程,分布式计算,消息传递,资源共享(内存共享)
常用的并发模型 ➢ 参与者模式 ➢ Petri网 ➢ 通信顺序进程
Scala语言入门
杨勇
Actor
参与者模式Actor model ➢ 当一个参与者接收到一则讯息,它可以做出一些决策、建立更多的参与者、传送更多
的讯息、决定要如何回答接下来的讯息
注解的是在编译和运行之外,对程序进行的操作 ➢ 自动生成文档 ➢ 在生成文档时自动排版 ➢ 代码的错误检查与忽略
注解的实质是一个标签,插入到代码中标志元编程工具对该段代码使用
Java的注解并不影响编译器的运行,但Scala的注解会,如@BeanProperty
可以自行编写新的元编程工具
Scala语言入门