scala actor编程之对象传递
scala 最吸引人的一点就是actor并发编程了。但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题。但是在正式开放中,光传字符串就显的势单力薄了。
所以如何传对象呢?
先看通过字符串传递消息的模型:
消息接收类:
import scala.actors.Actor
import org.andy.rtbd.actor.ActorDeal class ActorRev1 extends Actor{ def act()={
while(true){
receive {case str:String =>println("There is say "+str)
case _=>println("There is no message ")
}
}
} def dealAD(adm:ActorDeal)={ adm.dealPrint }
}
消息发送类
object ActorSed {
def main(args: Array[String]): Unit = {
var ar = new ActorRev1()
ar.start
ar!"111"
}
}
执行ActorSed,看一下结果:
There is say 111
这个结果是最简单通过字符串传递消息的,那么我们改造一下,看看如何传递对象。
首先,添加一个class。
class ActorDeal {
var msg:String=""
def dealPrint() = {
println("From deal " + msg)
}
}
然后改造消息接受类:
import scala.actors.Actor
import org.andy.rtbd.actor.ActorDeal class ActorRev1 extends Actor{ def act()={
while(true){
receive {
case ad:ActorDeal => dealAD(ad)
case str:String =>println("There is say "+str)
case _=>println("There is no message ")
}
}
} def dealAD(adm:ActorDeal)={ adm.dealPrint }
}
高亮的部分是新增的消息接收选项,so easy,我们对发送类稍加改造即可测试:
object ActorSed {
def main(args: Array[String]): Unit = {
var ar = new ActorRev1()
ar.start
var adm = new ActorDeal
adm.msg="HEHE"
ar!"111"
ar!adm
}
}
OK,我们可以看结果了:
There is say 111
From deal HEHE
虽说,代码量很小,但找了半天都没找到这方面的资料。自己苦逼看了半天,才蒙出来的。
如果对您有用的话,请推荐一下。谢谢
scala actor编程之对象传递的更多相关文章
- 大数据学习——actor编程
1 概念 Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制,Scala是运用消息(message)的发送.接收来实现多线程的.使用Scala能够更容易地实现多线程应用的开 ...
- scala面向对象.高阶函数,柯里化,Actor编程简介
1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...
- Scala编程--函数式对象
本章的重点在于定义函数式对象,也就是说,没有任何可变状态的对象的类.作为运行的例子,我们将创造若干把分数作为不可变对象建模的类的变体.在这过程中,我们会展示给你Scala面向对象编程的更多方面:类参数 ...
- Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- scala 高级编程
一.函数式编程 Scala中的函数可以独立存在, 不需要依赖任 何类和对象 def 放在类中就是方法:放在外边就是函数 1.将函数赋值给变量 Scala中的函数是一等公民, 可以独立定义, 独立存在 ...
- Scala函数式编程进阶
package com.dtspark.scala.basics /** * 函数式编程进阶: * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量: * 2, 函数更长用的方式 ...
- Scala并发编程【快速入门】
1.简介 Scala的actor提供了一种基于事件的轻量级线程.只要使用scala.actors.Actor伴生对象的actor()方法,就可以创建一个actor.它接受一个函数值/闭包做参数,一创建 ...
随机推荐
- 【MVC5】First Unit Test
1.控制器测试 注意点: 1.控制器中不要包含业务逻辑 2.通过构造函数传递服务依赖 例:MathController中有一个Add的Action using FirstUnitTest.Servic ...
- scrapy 安装详解
一. Scrapy简介 Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl we ...
- HDU1789 Doing Homework again 【贪心】
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 【VBA】切换引用样式
在Excle中有两种引用方式,例如:第一行第一列的单元格可以是:A1 也可以是R1C1 切换引用样式的代码如下: Sub 切换引用样式() Application.ReferenceStyle = ...
- eclipse debug调试java程序的九个技巧
九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions display 远程debug 最早开始用eclipse的debug的时候,只会F5 F6 F ...
- JavaWeb Session详解
代码地址如下:http://www.demodashi.com/demo/12756.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + ## Session的由来 上一篇博文介绍 ...
- 北大BBS2008年毕业生晒工资
http://www.amznz.com/19/快消类: 宝洁:本7200.研8200.博9700,均14个月,另有800交通补助,marketing每9个月 涨20%-30%. 玛氏:月薪10000 ...
- C#中静态方法和非静态方法的区别
静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...
- HTMLTestRunner 异常输出中文乱码
1.在代码中加入下面的代码并保存: # -.- coding:utf-8 -.- import sys reload(sys) sys.setdefaultencoding('utf-8') 2.找到 ...
- double check 解决单例模式的多线程并发问题
最近被多线程问题(multi-thread issue)弄昏了头.以前虽然也知道系统里要考虑多线程问题,也无数次见到double-check的代码,但是由于自己碰到这方面的问题基本上就是从其他地方 ...