//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)
}
}
}
}
}