谈到并发编程,大家都会想到 用java 的多线程来实现,因为大家知道java的 数据共享 和锁机制,能够支持 并发。 但是随着业务的膨胀, java的这种机制,对开发者的要求越来越高。 针对java的这些缺点,scala 使用 消息传递的方式来处理。每个消息发送者,都持有一个 mail, 消息接受者不停的轮询,从而避免数据的共享。
从实现上, scala 只需要 继承 actor 类,如:
object First_Actor extends Actor{//第一个线程
def act(){
for(i<-1 to 10){
println("Step: "+i)
Thread.sleep(2000)
}
}
}
object Second_Actor extends Actor{//第二个线程
def act(){
for(i<-1 to 10){
println("Step Further: "+i)
Thread.sleep(2000)
}
}
}
main{
First_Actor.start
Second_Actor.start
}
上面的讲的有名字的actor ,当有时需要临时的acotor 时,我们可以这么做,如下:
import scala.actors.Actor._
object Actor_Messages {
def main(args: Array[String]) {
val actor_message = actor{
while(true){
receive{
case msg => println("message content from inbox:" + msg)
}
}
}
val double_actor_message = actor{
while(true){
receive{
case msg:Double => println("Double from inbox:" + msg)
case _ =>
}
}
}
actor_message ! "spark"
double_actor_message! Math.PI
}
}
直接 使用 scala.actors.Actor._scala.actors.Actor.actor 对象,并且不需要 调用start方法
参考资料:
百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group
DT大数据梦工厂交流群:462923555
DT大数据微信公众账号:DT_Spark