Scala通信

//Scala单线程通信

package tongxin.test01.Demo01

import scala.actors.Actor
//Scala单线程通信
object ActorOps {
def main(args: Array[String]): Unit = {
//创建一个Actor线程实例
val ha=new HelloActor
//启动线程
ha.start()
//通信用 ! 可以理解为通过!向act方法发送消息
ha ! “小明”
}
}

//创建 一个Actor类
class HelloActor extends Actor{
//这个act方法就相当于java中runnable方法
override def act(): Unit = {
//用于接收外部发送过来的消息
receive{
case name:String=>{
println(“你好”+name)
}
case _=>{
println(“再见”)
}
}
}
}
//注意在scala中创建一个Actor,必须要让类扩展scala.actors.Actorr
//并且覆盖其中的方法act,在act方法中通过模式匹配来处理通信的业务逻辑
//使用Actor第一步需要启动actor,第二部通过“!”向Actor发送消息

package tongxin.test01.Demo02

使用case class来携带数据

import scala.actors.Actor

/**

  • 在scala编程中,一般都使用case class来携带数据
  • 所以一般通信的时候,使用case class作为信息
  • 上一个案例我们就可以将普通的scala类转化为case class
    */
    object Test02 {
    def main(args: Array[String]): Unit = {
    val sba=new SayByeActor
    sba.start()//启动线程
    sba ! Cat(“飞快的”,“消失了”)
    sba ! Greet(“非常棒”)
    }
    }
    class SayByeActor extends Actor{
    override def act(): Unit = {
    while (true){
    receive{
    case name:String=>{
    println(“你好”+name)
    }
    case Cat(name,content)=>{
    println(“猫”+name+","+content)
    }
    case Greet(name)=>{
    println(“你好,”+name)
    }
    case _=>{
    println(“那边凉快,那边待在”)
    }
    }
    }
    }
    }
    //创建了两个样例类
    case class Cat(name:String,content:String)
    case class Greet(name:String)

5.2.3.scala actor之间的相互通信

package tongxin.test01.Demo03

import scala.actors.Actor

//scala actor
object Test01 {
def main(args: Array[String]): Unit = {
val pActor=new ProgrammerActor()
val mActor=new ManagerActor(pActor)
pActor.start()
mActor.start()
val metting=“现在开会”
mActor ! metting
}
}
case class MorningGreet(name:String,greet:String)
case class WorkingInfo(content:String)

class ManagerActor(pActor:ProgrammerActor)extends Actor{
override def act(): Unit = {
while (true){
receive{
case meeting:String=>{
println(“开会通知”+meeting)
pActor ! MorningGreet(“everyBody”,“早上好”)

    }
    case  MorningGreet(name,greet)=>{
      println("程序员小张说"+name+","+greet)
      pActor ! WorkingInfo("今天的会议内容非常重要")
    }

  }
}

}
}

class ProgrammerActor extends Actor{
override def act(): Unit = {
while (true){
receive{
case MorningGreet(name,greet)=>{
println(“项目经理说:”+name+","+greet)
sender ! MorningGreet(“任务完成了大家有奖金”,“大家休假”)

    }
    case  WorkingInfo(content)=>{
      println(content)
    }
  }
}

}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值