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.它接受一个函数值/闭包做参数,一创建 ...
随机推荐
- RxJava操作符总结之过滤
RxJava操作符总结之过滤 jsut() just(T t1, T t2, T t3 ....) ,just能够传入多个同样类型的參数,并将当前參数一个接着一个的发送. Observable.jus ...
- How to check the 'OLE DB Destination' INPUT and OUTPUT
Step 1: Step 2: Step 3:
- Vue mixins extend
const mixins = { created () { console.log('mixins created') } } const mixins2 = { created () { conso ...
- 编写批处理命令来执行JAVA文件
http://baobeituping.iteye.com/blog/802543 1. JAVA工程路径结构 Project ------lib ------src ------W ...
- 解决cp: omitting directory 提示信息
解决cp: omitting directory 提示信息 执行cp时出现“cp: omitting directory ” 提示信息, 可以使用cp -r 参数来递归拷贝这些文件.
- systemd管理进程
systemd很强大的管理工具,这里简单用来管理一个进程: [Unit]Description=Imges Compress Server [Service]Type=simpleExecStart= ...
- windows利用jconsole远程监控linux的tomcat
1.配置tomcat ① 编辑tomcat的catelina.sh文件,进入tomcat安装目录,使用命令:sudo vim bin/catalina.sh,如果是普通用户启动的,则修改damen. ...
- spring利用ApplicationListener自启动
近期在用mina获取server的数据,但没有和spring进行集成,就利用ApplicationListener实现了自启动 package com.gamesvr.minaenpo; import ...
- 智能路由器开发指南_book
最近购得一个openwrt书籍<智能路由器开发指南>,作者张永智. Building a smart router with openwrt 作者网址:http://openwrt.bjb ...
- MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析
随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...