import scala.actors.Actor
classActor3extendsActor{
override def act(): Unit ={//act内部使用receive,偏函数用于消息的接受处理
receive{case"start"=>println("正在启动>>>>>>>>>>>>>>")}}}
object Actor3 {
def main(args: Array[String]): Unit ={//创建Actor对象
val actor =newActor3//启动Actor
actor.start()/*
! 发送异步消息,没有返回值。
!? 发送同步消息,等待返回值。
!! 发送异步消息,返回值是 Future[Any]。
*///发送没有返回值的异步消息
actor !"start"}}
控制台结果
正在启动>>>>>>>>>>>>>>
使用Actor实现不间断消息发送
import scala.actors.Actor
classActor4extendsActor{
override def act(): Unit ={//利用while(true)实现持续不间断发送消息while(true){
receive {case"start"=>println("正在启动>>>>>>>>>>>>")case"send"=>println("发送中>>>>>>>>>>>>")//接收到"quit"字符串时,退出系统,中断循环case"quit"=> System.exit(0)}}}}
object Actor4 {
def main(args: Array[String]): Unit ={//创建Actor对象
val actor =newActor4//启动Actor
actor.start()//发送消息
actor !"start"
actor !"send"
actor !"quit"}}
控制台结果
正在启动>>>>>>>>>>>>
发送中>>>>>>>>>>>>
Process finished with exit code 0
用react方法替代receive方法接收消息
import scala.actors.Actor
classActor5extendsActor{
override def act(): Unit ={//利用react实现消息的接收,比receive效率更高,react方式会复用线程,避免频繁的线程创建、销毁和切换//如果要用react持续不间断接收,需要在外层加loop
loop {
react {case"start"=>println("正在启动>>>>>>>>>>>>")case"send"=>println("发送中>>>>>>>>>>>>")//接收到"quit"字符串时,退出系统,中断循环case"quit"=> System.exit(0)}}}}
object Actor5{
def main(args: Array[String]): Unit ={//创建Actor对象
val actor =newActor5//启动Actor
actor.start()//发送消息
actor !"start"
actor !"send"
actor !"quit"}}
控制台结果
正在启动>>>>>>>>>>>>
发送中>>>>>>>>>>>>
结合case class,通过匹配不同的样例类执行不同操作
import scala.actors.{Actor, Future}//异步消息样例类caseclassAsyncMessage(id:Int,msg:String)//回复消息样例类caseclassReplyMessage(msg:String)//同步消息样例类caseclassSyncMessage(id:Int,msg:String)classActor6extendsActor{
override def act(): Unit ={
loop{
react{caseAsyncMessage(id,msg)=>{println(s"id:$id=======msg:$msg")// 对于消息接收者,可以使用sender回复消息
sender !ReplyMessage("Roger that!")}caseSyncMessage(id,msg)=>{println(s"id:$id=======msg:$msg")}}}}}
object Actor6{
def main(args: Array[String]): Unit ={//创建Actor
val actor =newActor6//启动Actor
actor.start()/*
! 发送异步消息,没有返回值。
!? 发送同步消息,等待返回值。
!! 发送异步消息,返回值是 Future[Any]。
*///发送没有返回值的异步消息
actor !AsyncMessage(1,"This is AsyncMessage and no returned value.")//发送有返回值的异步消息//Futureb表示一个异步操作的结果状态,可能还没有实际完成的异步任务的结果
val future: Future[Any]= actor !!AsyncMessage(2,"This is AsyncMessage and needs returned value.")//根据返回的状态提取最终的结果
val replyMessage: ReplyMessage = future.apply().asInstanceOf[ReplyMessage]println(replyMessage)//发送同步消息
actor !?SyncMessage(3,"This is SyncMessage!")}}
控制台结果
id:1=======msg:This is AsyncMessage and no returned value.
id:2=======msg:This is AsyncMessage and needs returned value.
ReplyMessage(Roger that!)
id:3=======msg:This is SyncMessage!