简介

scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制,scala是运用消息(message)的发送,接收来实现多线程.使用scala能够更容易实现多线程应用的开发

scala Actor是scala 2.10.x版本及之前版本的Actor
scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃

区别

传统java并发编程与scala Actor编程的区别

java内置线程模型 scala actor模型
“共享数据-锁”模型(share data and lock) share nothing
每个object有一个monitor,监视多线程对共享数据的访问 不共享数据,actor之间通过message通讯
加锁的代码段用synchronized标识
死锁问题
每个线程内部是顺序执行的 每个actor内部是顺序执行的

对于java, 我们都知道它的多线程实现需要对共享资源(变量,对象等)使用synchronized关键字进行代码块同步,对象锁互斥等等.而且,常常一大块的try—-catch语句块中加上wait方法,notify方法,notifyAll方法是让人很头疼的.原因就在于java中多数使用的是可变状态的对象资源,对这些资源进行共享来实现多线程编程的话,控制好资源竞争与防止对象状态被意外修改是非常重要的,而对象状态的不变性也是较难以保证的.而在scala中,我们可以通过复制不可变状态的资源(即对象,scala中一切都是对象,连函数,方法也是)的一个副本,再基于Actor的消息发送,接收机制进行并行编程

Actor方法执行顺序

  1. 首先调用start()方法启动Actor
  2. 调用start()方法后其act()方法也会被执行
  3. 向Actor发送消息

发送消息的方法

image.png