码迷,mamicode.com
首页 > 其他好文 > 详细

scala并发编程Actor实战

时间:2015-07-24 01:38:28      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:scala

今天在这里跟大家分享下王家林老师讲的scala编程中的actor的并发编程。

在java中,同时进行一个操作的时候,java会先把共享数据锁死,从而避免不同的操作来同时操作一个数据,这个就形成了资源调度的问题,而且如果用不好,还会造成死锁。而在scala中,通过类似消息的发送和接收的队列的方式,来访问同一个共享数据,这样一来,当轮到一个操作来访问某个数据的时候,不会发生另一个操作也同时访问的该数据的情况,这样就避免了资源争用的问题及死锁的发生。下面我们通过一个小小的实例来看看scala是怎样通过actor来实现并发的。

 

 

package scala.learn

import scala.actors.Actor

object First_Actor extends Actor{//定义第一个Actor
  
  def act(){
    
    println(Thread.currentThread().getName)  //打印第一个Actor线程名
    
    for(i<- 1 to 10){
      println("Step:" + i)//依次打印1到10
      Thread.sleep(2000)
    }
  }
}

object Second_Actor extends Actor{//定义第一个Actor
  
  def act(){
    
     println(Thread.currentThread().getName)//打印第二个Actor线程名
     
    for(i<- 1 to 10){
      println("Step_Second:" + i)//依次打印1到10
      Thread.sleep(2000)
    }
  }
}

object testactor{
  def main(args: Array[String]){
    First_Actor.start()//启动第一个Actor
    
    Second_Actor.start()//启动第二个Actor
    
  }
}


代码中关键地方我都给出了注释,让我们来看看程序的运行结果:

ForkJoinPool-1-worker-13
ForkJoinPool-1-worker-11
Step:1
Step_Second:1
Step_Second:2
Step:2
Step_Second:3
Step:3
Step_Second:4
Step:4
Step:5
Step_Second:5
Step:6
Step_Second:6
Step:7
Step_Second:7
Step:8
Step_Second:8
Step:9
Step_Second:9
Step:10
Step_Second:10

我们可以发现,程序的两个不同的actor是占用了两个不同的线程运行的。

 

 

王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战经典”视频、音频和PPT下载!第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析

百度云:http://pan.baidu.com/s/1pJ5jzHx

腾讯微云:http://url.cn/aSawrm

360云盘:http://yunpan.cn/cctL3QYACaVNa  访问密码 c0fb


信息来源于 DT大数据梦工厂微信公众账号:DT_Spark


本文出自 “如果我是雨” 博客,请务必保留此出处http://qingyuesama.blog.51cto.com/3529305/1677771

scala并发编程Actor实战

标签:scala

原文地址:http://qingyuesama.blog.51cto.com/3529305/1677771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!