1. package com.dingxin.entrance
  2.  
  3. import java.text.SimpleDateFormat
  4. import java.util.Date
  5.  
  6. import scala.actors.Actor
  7. import scala.actors.Actor._
  8. /**
  9. * Created by zhen on 2019/1/24.
  10. */
  11. object My_Actor_Receive extends Actor{
  12. def act(){
  13. while(true){
  14. receive{
  15. case str : String => print(str + " ") // 模式匹配
  16. case dat : Date => println(new SimpleDateFormat("yyyy").format(dat))
  17. case _ => println("My heart will go on !")
  18. }
  19. }
  20. }
  21. }
  22. object Actor_Receive {
  23. def main(args: Array[String]) {
  24. val getMessage = actor{
  25. while(true){
  26. receive{
  27. case str : String => print(str) // 模式匹配
  28. case dat : Date => println(new SimpleDateFormat("yyyy").format(dat))
  29. case _ => My_Actor_Receive ! null // 消息转发
  30. }
  31. }
  32. }
  33. val sendMessage = actor{
  34. while(true){
  35. receive{
  36. case str : String => getMessage ! str + " " // 消息转发
  37. case dat : Date => getMessage ! dat
  38. case _ => getMessage ! null
  39. }
  40. }
  41. }
  42. sendMessage ! "Scala"
  43. sendMessage ! new Date()
  44. sendMessage ! 2020
  45.  
  46. // 这种方式必须执行start开启,且都是并行执行,不确定先后顺序
  47. My_Actor_Receive.start()
  48. My_Actor_Receive ! "Spark"
  49. }
  50. }

结果1:

  

结果2:

  

信息交互

  1. package big.data.analyse.scala
  2.  
  3. import scala.actors.Actor
  4. import scala.actors.Actor._
  5. /**
  6. * 消息发送与接收,可用于流计算测试的输入
  7. * Created by zhen on 2018/4/15.
  8. */
  9. object ActorTest {
  10. def main(args: Array[String]) {
  11. val actor = new HelloActor
  12. actor.start//启动actor消息机制
  13. var counter = 0
  14. while(counter<10){
  15. actor ! "Step " + counter //发送消息
  16. counter += 1
  17. Thread.sleep(2000)
  18. self.receive{case msg => println("返回结果:"+msg)} // 获取子线程的消息
  19. }
  20. }
  21. }
  22. class HelloActor extends Actor{
  23. def act(): Unit ={
  24. while(true){
  25. receive{
  26. case content : String => println("Message : " + content)
  27. sender ! content.split(" ")(1) // 向主线程发送消息
  28. }
  29. }
  30. }
  31. }

结果3:

  

loop+react

  1. package big.data.analyse.scala.actor
  2.  
  3. import java.net.{UnknownHostException, InetAddress}
  4. import scala.actors.Actor
  5. import scala.actors.Actor._
  6.  
  7. /**
  8. * Created by zhen on 2019/6/19.
  9. */
  10. object NameResolver extends Actor{
  11. def act(){
  12. loop {
  13. react {
  14. case Net (name, actor) => actor ! getIp(name)
  15. case msg => println("Unhandled message : " + msg)
  16. }
  17. }
  18. }
  19. def getIp(name : String) : Option[InetAddress] = {
  20. try{
  21. println(name)
  22. Some(InetAddress.getByName(name))
  23. } catch {
  24. case _ : UnknownHostException => None
  25. }
  26. }
  27. }
  28.  
  29. case class Net(name : String, actor: Actor)
  30.  
  31. object Actor_More_Effective {
  32. def main(args: Array[String]) {
  33. NameResolver.start
  34. NameResolver ! Net("www.baidu.com", self)
  35. NameResolver ! "www.xiaomi.com"
  36.  
  37. for(i <- 1 until 10){
  38. NameResolver ! "小米" + i
  39. }
  40. println(self.receiveWithin(1000){case x => x})
  41. }
  42. }

结果4:

  

Actor详解

  1.Actor是一个通信模型,Scala提供了Actor的实现

  2.Spark1.6之前集群节点之间通信使用的是Akka,Akka底层是Actor实现的。Spark1.6之后,节点的通信变成Netty

  3.Actor相当于我们理解的Thread,Actor的出现主要解决的是代码锁的问题

  4.Actor底层通信实现用到了模式匹配

Scala并发编程【进阶】的更多相关文章

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  3. Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

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

    演示样例代码及凝视: //scala并发编程中的react和loop,共同特点: //通过线程存用的方式让性能有所提升. //Actor本身的运行,被actor子系统管理的时候,会有一个或者多个远程的 ...

  5. Scala并发编程【快速入门】

    1.简介 Scala的actor提供了一种基于事件的轻量级线程.只要使用scala.actors.Actor伴生对象的actor()方法,就可以创建一个actor.它接受一个函数值/闭包做参数,一创建 ...

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

    刚才看了一下,群里王家林老师又更新课程了,真为王老师的勤奋感到佩服,于是迫不及待的下载下来观看学习.本期讲的是关于scala并发编程的react.loop代码实战. 信息来源于 DT大数据梦工厂微信公 ...

  7. Scala函数式编程进阶

    package com.dtspark.scala.basics /** * 函数式编程进阶: * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量: * 2, 函数更长用的方式 ...

  8. Scala并发编程

    Scala的actor提供了一种基于事件的轻量级线程.只要使用scala.actors.Actor伴生对象的actor方法,就可以创建一个actor.它接受一个函数值/闭包做参数,一创建好就开始运行. ...

  9. Scala并发编程模型AKKA

    一.并发编程模型AKKA Spark使用底层通信框架AKKA 分布式 master worker hadoop使用的是rpc 1)akka简介 写并发程序很难,AKKA解决spark这个问题. akk ...

  10. Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏

    /** * 函数式编程进阶: * 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量 * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称 ...

随机推荐

  1. centOS改编码

    http://jingyan.baidu.com/article/ab69b270de8b4f2ca7189f1d.html cd /rootvim .bashrcLANG="zh_CN.G ...

  2. Django使用Channels实现WebSocket--下篇

    希望通过对这两篇文章的学习,能够对Channels有更加深入的了解,使用起来得心应手游刃有余 通过上一篇<Django使用Channels实现WebSocket--上篇>的学习应该对Cha ...

  3. RabbitMQ系列(一)RabbitMQ在Ubuntu上的环境搭建

    环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的 ...

  4. Yaml 文件中Condition If- else 判断的问题

    在做项目的CI/ CD 时,难免会用到 Travis.CI 和 AppVeyor 以及 CodeCov 来判断测试的覆盖率,今天突然遇到了一个问题,就是我需要在每次做测试的时候判断是否存在一个环境变量 ...

  5. ZooKeeper系列(1):安装搭建ZooKeeper环境

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...

  6. SpringBoot学习(八)-->SpringBoot之过滤器、监听器

    本文将直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener. 过滤器(Filter)和 监听器(Listener)的注册方法和 Servlet ...

  7. 第一册:lesson sixty nine.

    原文: The car race. There is a car race near our town every year. In 1995 ,there was a very big race. ...

  8. 第一册:lesson sixty five.

    原文: Not a baby. A:What are you going to do this evening Jill? B:I'm going to meet some friends, dad. ...

  9. TeamViewer 12\13\14 破解版(解决检测为商业用途的方式)

    一.Windows系统下破解TeamViewer的方式 1.用Windows直接卸载本地的TeamViewer软件2.下载一个Everything软件,并安装好它(这是一个搜索本机文件的工具,超级好用 ...

  10. 4.6 explain 之 rows

    一.说明 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数. 二.示例 关注我的公众号,精彩内容不能错过