关键字
1)final
如果方法不想被重写可以使用final关键字进行修饰
用final修饰的:
类:类不能被继承
方法:不能被重写
val
2)type
别名设置
使我们的程序变得更灵活
T
trait b {
type T
def go(str:T)={
println(str)
}
}
object test extends b {
override type T = String
def main(args: Array[String]): Unit = {
test.go("ycf")
}
}
样例类&样例对象
1)样例类
样例类支持模式匹配
写法:case class 类名(属性…)
case class Boy(high:Int)
case class Girl(high:Int)
object Test extends App {
def getmatch(obj:Any)= obj match {
case Boy(x)=>print(x)
case Girl(x)=>print(x)
}
getmatch(Boy(155))
}
2)样例对象
写法:case object 类名(属性…)
不能封装数据
支持模式匹配
case object Check
match{
case "Check" => println(Check)
}
样例类,模式匹配,偏函数
https://www.jianshu.com/p/bd01f88b6c33
并发编程模型AKKA
Spark使用底层通信框架AKKA
分布式
master
worker
hadoop使用的是rpc
1)akka简介
写并发程序很难,AKKA解决spark这个问题。
akka构建在JVM平台上,是一种高并发、分布式、并且容错的应用工具包
akka用scala语言编写同时提供了scala和java的开发接口
akka可以开发一些高并发程序。
2)Akka的Actor模型
akka处理并发的方法基于actor模型
在基于actor的系统中,所有事物都是actor。
actor作为一个并发模型设计和架构的,面向对象不是。
actor与actor之间只能通过消息通信。
Akka特点:
(1)对并发模型进行了更高的抽象
(2)异步、非阻塞、高性能的事件驱动编程模型
(3)轻量级事件处理(1G内存可以容纳百万级别的Actor)
同步:阻塞(发消息 一直等待消息)
异步:不阻塞(发消息 不等待 该干嘛干嘛)
actor简化了并发编程,提高了程序性能。
Actor
Actor工作机制
class ZioAcrot(h: ActorRef) extends Actor{
override def receive: Receive = {
case "我是假面骑士zio" =>
h ! "你好,我是假面骑士"
}
}
class MeActor extends Actor{
override def receive: Receive = {
case "你好,我是假面骑士" => println("好巧,我也是")
case "我打不赢你" => println("是的")
}
}
object AkkaDrive {
//通过ActorSystem创建Actor
private val akdr = ActorSystem("akdr")
//Actor通过AcrotRef通信
private val me_actor = akdr.actorOf(Props[MeActor],"meactor")
private val zio_actor = akdr.actorOf(Props(new ZioAcrot(me_actor)),"zioactor")
def main(args: Array[String]): Unit = {
zio_actor ! "我是假面骑士zio"
}
}
好巧,我也是
所以发送给另一个Actor的邮箱我们只需要拿到他的代理,按先进先出队列处理