Scala並發編程react、loop代碼實戰解析

來源:互聯網
上載者:User

標籤:

  Scala並發編程react、loop代碼實戰解析,內容介紹和視頻連結:http://pan.baidu.com/s/1bnlpuVH,歡迎下載視頻

  內容介紹:Scala並發編程中共用線程的使用

(1)在Actor類的act方法中,可以使用react方法來替代receive方法進行訊息的處理,使用react方法的好處是可以在一個線程中執行多個Actor的訊息處理函數,需要注意的是當react方法接受到的訊息匹配到它方法體中的一個偏函數時並進行訊息的處理後會導致該react方法的退出,這時一般常常在react方法中每個偏函數的最後一行加上 act()方法 使得react方法可以重新關聯Actor的郵箱。

(2)由於讓訊息處理器中的每個偏函數末行加上一個 act()方法 來負責保持迴圈繼續下去是一件很麻煩且很不公平的事情,Scala語言提供了loop組合子來簡化這個問題,在Actor的act()方法和react方法之間使用loop組合子可以產生一個無限的迴圈,如果想給迴圈加上一個條件,可以把loop換成loopWhile,然後在其後面加上條件判斷語句。

實戰代碼:

 

object NameResolver extends Actor{  

def act(){

//用react方法來替代receive方法進行訊息的處理,react允許共用線程資料,react方法匹配一次並執行完成,然後會退出, 通過再次調用act()方法來重新關聯Actor的郵箱。

  react{      

    case NameToIp(name,actor)=>        

      println(name+":"+getIp(name))        

      actor ! "successfully done"

      act //通過調用繼續處理郵箱資訊

    case msg =>        

      println(msg)        

      act      

    case _=>        

      println("nothing else ...")        

      act    

    }

       /*   

  //loop可以迴圈調用react來處理郵箱的資訊

loop {      

    react{         

      case NameToIp(name,actor)=>        

        println(name+":"+getIp(name))        

        actor ! "successfully done"               

      case msg =>          

        println(msg)      

      }     

  }

}  

def getIp(siteName:String): Option[InetAddress] ={    

try{      

println(InetAddress.getByName(siteName))      

Some(InetAddress.getByName(siteName))    

}catch{      

case _ : UnknownHostException =>None     }   } }    

case class NameToIp(name:String,actor:Actor)

 object ActorTest3 {  

def main(args:Array[String]){    

NameResolver.start()    

NameResolver ! NameToIp("www.baidu.com",self)    

self.receive{      

case msg=> println(msg)      

case _ => println("nothing")    

}    

NameResolver ! "test"      

}   }

重磅!王家林親授《DT大資料夢工廠》大資料實戰視頻“Scala深入淺出實戰(1-69講)”全部視頻、音頻、代碼和PPT:

百度網盤:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group,歡迎分享

 

Scala並發編程react、loop代碼實戰解析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.