Scala Actor并发编程
来源:互联网 发布:德语识别算法 编辑:程序博客网 时间:2024/05/21 18:32
Java中的并发编程主要通过线程实现的,通过共享资源的机制实现并发,但会面临着死锁的问题。在Scala中,是通过消息传递来实现并发的,而Actor正是实现消息传递的。
1、Actor初识
package com.yy.enhanceimport scala.actors.Actor/** * Scala Actor并发编程 * 初识Actor */object MyActor1 extends Actor{ //重新act方法 def act(){ for(i <- 1 to 10){ println("actor1_ " + i) Thread.sleep(2000) } }}object MyActor2 extends Actor{ //重新act方法 def act(){ for(i <- 1 to 10){ println("actor2_ " + i) Thread.sleep(2000) } }}object ActorTest extends App { //启动Actor MyActor1.start() MyActor2.start()}结果如下:
actor1_ 1actor2_ 1actor1_ 2actor2_ 2actor1_ 3actor2_ 3actor1_ 4actor2_ 4actor2_ 5actor1_ 5actor2_ 6actor1_ 6actor2_ 7actor1_ 7actor2_ 8actor1_ 8actor2_ 9actor1_ 9actor2_ 10actor1_ 10
2、Actor消息传递
package com.yy.enhanceimport scala.actors.Actor/** * Actor 消息传递 * */class MyActorForMsg extends Actor{ //实现act方法 def act(){ while(true){ //receive从邮箱中获取一条消息 //传递给它的函数(如下面case块,执行时转换为一个偏函数) receive{ case "my_msg" => println("received the msg:" ) case _ => println("Not received the correct msg.") } } }}object ActorTest2 extends App { val actor = new MyActorForMsg() //启动Actor actor.start() //发送消息--正确消息 actor!"my_msg" //发送消息--非正确消息 actor!"not_my_msg"}结果如下:
received the msg:Not received the correct msg.
3、匿名Actor
使用scala.actors.Actor._提供的actor工具方法可以方便的创建Actor对象,如下:
package com.yy.enhance//提供了actor方法import scala.actors.Actor._/** * 匿名Actor */object ActorTest3 extends App { //创建Actor对象 val actor_msg = actor{ while(true){ receive{ case msg => println("Msg from MailBox:" + msg) } } } //创建Actor对象 val actor_Int = actor{ while(true){ receive{ case msg:Int => println("the Int Number from MailBox:" + msg) case _ => println("Not a Int Number") } } } //发送消息 actor_msg!"mmmm" actor_Int!10 actor_Int!"22"}结果如下:
the Int Number from MailBox:10Not a Int NumberMsg from MailBox:mmmm
4、Actor 和case class 以及消息接收
package com.yy.enhanceimport scala.actors.Actorimport actors._, Actor._/** * Actor with Case Class * */case class Emp(val name:String, val age:Int)//Actorclass MyActor extends Actor{ //重写act方法 def act(){ while(true){ receive { case Emp(name,age) =>{ println("Emp name:" + name + ",age:" + age) //给消息发送者回复消息 sender!"well done,Boy!" } } } }}object ActorWithCaseClassTest extends App{ val myActor = new MyActor //启动 myActor.start() //发送消息 myActor!Emp("yy",25) //接收回传消息 self.receive{ case msg => println(msg) }}结果如下:
Emp name:yy,age:25well done,Boy!
0 0
- Scala Actor并发编程
- Scala Actor并发编程
- 快学Scala- Scala Actor 并发编程
- Scala使用Actor进行并发编程
- scala学习十二 并发编程二 actor模型
- 第67讲 Scala并发编程 中的actor
- scala进阶20-基于Actor多并发编程
- 第17节:scala中Actor并发编程
- 快学Scala-Actor并发编程实现WordCount
- scala之actor编程
- Scala学习笔记11 - Actor和并发
- Scala语言中基于Actor的并发编程的机制初步
- scala并发编程原生线程Actor、Case Class下的消息传递和偏函数实战
- 漫谈并发编程:Actor模型
- scala actor
- scala Actor
- Scala actor
- 第68讲 scala并发编程原生线程actor、class class 下的消息传递和偏函数
- T-SQL 基本语句 (读书笔记)
- MySQL数据库的增删查修
- UI按钮事件的添加以及delegate的简单应用
- start
- iOS Xib中 UIScrollView 布局注意事项
- Scala Actor并发编程
- 数据库总结.5
- 不吐不快,关于新版csdn
- Laravel学习历程
- 【杭电oj】1879 - 继续畅通工程(最小生成树)
- String、StringBuffer与StringBuilder之间区别
- Android起航系列第一章:Android手机APP起航
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- java.lang.NoClassDefFoundError: org/uncommons/maths/random/MersenneTwisterRNG解决方法参考