scala学习笔记12-Actor 线程通信

Actor

  • Actor类似于java中的多线程编程,用于线程通信,scala中提供的模型与多线程不同,scala中Actor尽可能避免锁和共享状态,从而避免多线程并发时出现资料争用的情况,进而提升多线程编程的性能。些外Scala Actor的这种模型还可以避免死锁等一系列传统多线程的问题
  • Spark中使用的分布式多线程框架,是Akka。Akka也实现了类似于Actor的模型。
  • 收发case class类型的消息,在scala中,通常建议使用样例类,即case class来作为消息进行发送,然后在actor接收消息之后,可以使用scala强大的模式匹配功能来进行不同消息处理。

收发case class类型的消息
		import scala.actors.Actor //导入scala.actors.Actor包
		case class Login(var uname:String,var pwd:String) //创建登录样例类
		case class Register(var uname:String,var pwd:String) //创建注册样例类
		class ActorServer extends Actor{
		  //继承scala.actors.Actor,重写act
		  override def act(): Unit =  {
			while(true) {
			  receive{
				case msg:String => println(msg) //匹配发送过来的消息
				case Login(uname,pwd) =>println("亲爱的"+uname+"欢迎登录!") //匹配登录的方法
				case Register(uname,pwd) =>println("恭喜"+uname+",注册成功!") //匹配注册的方法
			  }
			}
		  }
		}
Actor的创建、启动和消息发送
		object ActorClient {

		  def main(args: Array[String]): Unit = {
			//actor的创建、启动和消息发送
			//创建actor
			val server = new ActorServer()
			//启动
			server.start
			//调用
			server!"hello" //hello
			server!new Login("a001","123456") //亲爱的a001欢迎登录!
			server!new Register("ab003","2312") //恭喜ab003,注册成功!
		  }

		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值