zoukankan      html  css  js  c++  java
  • scala actor编程之对象传递

    scala 最吸引人的一点就是actor并发编程了。但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题。但是在正式开放中,光传字符串就显的势单力薄了。

    所以如何传对象呢?

    先看通过字符串传递消息的模型:

    消息接收类:

    import scala.actors.Actor
    import org.andy.rtbd.actor.ActorDeal
    
    class ActorRev1 extends Actor{
      
        def act()={
          while(true){
            receive  {case str:String =>println("There is say "+str)
              case _=>println("There is no message ")
            }
          }
        }
        
        def dealAD(adm:ActorDeal)={
    
          adm.dealPrint
          
        }
    }

    消息发送类

    object ActorSed {
    
      def main(args: Array[String]): Unit = {
        var ar = new ActorRev1()
        ar.start
       
        ar!"111"
      }
    
    }

    执行ActorSed,看一下结果:

    There is say 111

    这个结果是最简单通过字符串传递消息的,那么我们改造一下,看看如何传递对象。

    首先,添加一个class。

    class ActorDeal {
        
      var msg:String=""
      
      def dealPrint() = {
        println("From deal " + msg)
      }
    }

    然后改造消息接受类:

     1 import scala.actors.Actor
     2 import org.andy.rtbd.actor.ActorDeal
     3 
     4 class ActorRev1 extends Actor{
     5   
     6     def act()={
     7       while(true){
     8         receive  {
     9           case ad:ActorDeal => dealAD(ad)
    10           case str:String =>println("There is say "+str)
    11           case _=>println("There is no message ")
    12         }
    13       }
    14     }
    15     
    16     def dealAD(adm:ActorDeal)={
    17 
    18       adm.dealPrint
    19       
    20     }
    21 }

    高亮的部分是新增的消息接收选项,so easy,我们对发送类稍加改造即可测试:

     1 object ActorSed {
     2 
     3   def main(args: Array[String]): Unit = {
     4     var ar = new ActorRev1()
     5     ar.start
     6     var adm = new ActorDeal
     7     adm.msg="HEHE"
     8     
     9     ar!"111"
    10     ar!adm
    11   }
    12 
    13 }

    OK,我们可以看结果了:

    1 There is say 111
    2 From deal HEHE

    虽说,代码量很小,但找了半天都没找到这方面的资料。自己苦逼看了半天,才蒙出来的。

    如果对您有用的话,请推荐一下。谢谢

  • 相关阅读:
    GeoMesa Java API-写入与查询数据
    GeoMesa命令行,索引概述
    HBase,以及GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计
    笔趣看小说Python3爬虫抓取
    python网络爬虫
    Kafka客户端Producer与Consumer
    ScalikeJDBC,操作mysql数据,API
    mysqldb
    Python 反射
    Go 类型转换
  • 原文地址:https://www.cnblogs.com/vikings-blog/p/3941947.html
Copyright © 2011-2022 走看看