scala并发编程Actor实战

今天在这里跟大家分享下王家林老师讲的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

时间: 2024-09-28 15:35:57

scala并发编程Actor实战的相关文章

Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/LwsfuGIsWEk/优酷:http://v.youku.com/v_show/id_

68:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析

今天给大家带来的是王家林老师的scala编程讲座的第68讲:Scala并发编程原生线程Actor.Cass Class下的消息传递和偏函数实战解析 昨天讲了Actor的匿名Actor及消息传递,那么我们今天来看一下原生线程Actor及CassClass下的消息传递,让我们从代码出发: case class Person(name:String,age:Int)//定义cass Class class HelloActor extends Actor{//预定义一个Actor  def act()

Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/mm3eDHk3T5o/优酷:http://v.youku.com/v_show/id

王家林系列之scala--第69讲:Scala并发编程react、loop代码实战详解

刚才看了一下,群里王家林老师又更新课程了,真为王老师的勤奋感到佩服,于是迫不及待的下载下来观看学习.本期讲的是关于scala并发编程的react.loop代码实战. 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark 关注微信账号,获取更多关于王家林老师的课程内容 王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载! 百度云盘:http://pan.baidu.com/s/1c0noOt6腾讯微云:http://url.cn/TnGbdC

Scala并发编程匿名Actor、消息传递、偏函数实

学习了Scala并发编程匿名Actor.消息传递.偏函数实战解析及其在Spark源码中的应用解析,具体来说Scala就是通过actor_message=actor{},实现匿名Actor并发消息传递的,这样就的方法在spark用应用很广泛,极大地简化了程序编写,提高效率: def main(args:Array[string]){ val actor_message=actor{ while(true){ receive{ Case msg=>println( “messsage  from i

Scala并发编程react、loop代码实战

学习了Scala并发编程react.loop代码实战详解,通过线程重用,提升性能.具体通过loop进行循环,应用react重复接收消息,适用于带有界面的事件驱动的方式 def  act() loop{ React { Case Net(name,actor)=> Actor! getIp(name) Case msg=> Println(“Unhanded message:”+msg) } } 王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和P

Scala并发编程react、loop代码实战解析

Scala并发编程react.loop代码实战解析,内容介绍和视频链接:http://pan.baidu.com/s/1bnlpuVH,欢迎下载视频 内容介绍:Scala并发编程中共享线程的使用 (1)在Actor类的act方法中,可以使用react方法来替代receive方法进行消息的处理,使用react方法的好处是可以在一个线程中执行多个Actor的消息处理函数,需要注意的是当react方法接受到的消息匹配到它方法体中的一个偏函数时并进行消息的处理后会导致该react方法的退出,这时一般常常

Scala并发编程react、loop代码实战具体解释

演示样例代码及凝视: //scala并发编程中的react和loop,共同特点: //通过线程存用的方式让性能有所提升. //Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的线程让当前的actor使用 //普通情况下每一个Actor都有自己的线程.仅仅有有自己的线程时,我们的Actor中的actor方法才会运行. //可是,这样线程的开销会很大,所以为了共用线程,一个actor使用多个线程后,我们不想马上回收,我们想共用. //scala给我们提供了两个方法:react

Scala并发编程react、loop代码实战详解

示例代码及注释: //scala并发编程中的react和loop,共同特点: //通过线程存用的方式让性能有所提升. //Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的线程让当前的actor使用 //一般情况下每个Actor都有自己的线程.只有有自己的线程时,我们的Actor中的actor方法才会执行. //但是,这样线程的开销会非常大,所以为了共用线程,一个actor使用多个线程后,我们不想立即回收,我们想共用. //scala给我们提供了两个方法:react方法和