3
回答
Scala中的react默认是4个线程,如何修改线程数量?
【腾讯云】学生服务器套餐10元/月 >>>   
Scala中的react默认是4个线程,如何修改线程数量?
举报
tqyin
发帖于5年前 3回/373阅

是指Scala Actor?
不知道,如果是的话建议改用akka,官方已经推荐akka了,好像是scala actor的垃圾回收有问题。
个人也觉得akka的写法更直观。

  1. import java.net.InetAddress  
  2. import java.net.UnknownHostException   
  3. import actors._, Actor._  
  4. import scala.actors.Actor  
  5.   
  6. /** 
  7.  * scala Actor构建在java的线程基础之上的, 
  8.  * 为了避免频繁的线程创建、销毁和切换等,scala中提供了react方法 
  9.  * 方法执行完毕后,仍然被保留 
  10.  */  
  11. object NameResolver extends Actor{  
  12.   def act(){  
  13.     react{  
  14.       //模式匹配  
  15.       case Net(name,actor) =>  
  16.         /** 
  17.          * 想actor发送解析后的IP地址 
  18.          * 该例中,actor为本身,即向本身发送消息,存入邮箱 
  19.          */  
  20.         actor!getIpAddress(name)  
  21.         //再次调用act方法,从本身邮箱中读取消息  
  22.         //如果消息为空,则等待  
  23.         act  
  24.       case "EXIT" =>  
  25.         println("Name resolver exiting.")  
  26.         //匹配邮箱中的单个信息,本例中会匹配邮箱中的IP地址信息  
  27.       case msg =>  
  28.         println("Unhandled message: " + msg)  
  29.         act  
  30.     }  
  31.   }  
  32.     
  33.   def getIpAddress(name:String):Option[InetAddress] ={  
  34.     try{  
  35.        println(InetAddress.getByName(name))  
  36.        Some(InetAddress.getByName(name))  
  37.     } catch {  
  38.       case _: UnknownHostException => None  
  39.     }  
  40.   }  
  41. }  
  42. case class Net(name:String,actor:Actor)  
  43.   
  44. object ActorWithReAct extends App {  
  45.   //启动Actor  
  46.   NameResolver.start()  
  47.   //发消息  
  48.   NameResolver!Net("www.baidu.com",self)  
  49.     
  50.   //接收消息  
  51.   println(self.receive{case msg => msg})  
  52. }  

引用来自“tqyin”的评论

  1. import java.net.InetAddress  
  2. import java.net.UnknownHostException   
  3. import actors._, Actor._  
  4. import scala.actors.Actor  
  5.   
  6. /** 
  7.  * scala Actor构建在java的线程基础之上的, 
  8.  * 为了避免频繁的线程创建、销毁和切换等,scala中提供了react方法 
  9.  * 方法执行完毕后,仍然被保留 
  10.  */  
  11. object NameResolver extends Actor{  
  12.   def act(){  
  13.     react{  
  14.       //模式匹配  
  15.       case Net(name,actor) =>  
  16.         /** 
  17.          * 想actor发送解析后的IP地址 
  18.          * 该例中,actor为本身,即向本身发送消息,存入邮箱 
  19.          */  
  20.         actor!getIpAddress(name)  
  21.         //再次调用act方法,从本身邮箱中读取消息  
  22.         //如果消息为空,则等待  
  23.         act  
  24.       case "EXIT" =>  
  25.         println("Name resolver exiting.")  
  26.         //匹配邮箱中的单个信息,本例中会匹配邮箱中的IP地址信息  
  27.       case msg =>  
  28.         println("Unhandled message: " + msg)  
  29.         act  
  30.     }  
  31.   }  
  32.     
  33.   def getIpAddress(name:String):Option[InetAddress] ={  
  34.     try{  
  35.        println(InetAddress.getByName(name))  
  36.        Some(InetAddress.getByName(name))  
  37.     } catch {  
  38.       case _: UnknownHostException => None  
  39.     }  
  40.   }  
  41. }  
  42. case class Net(name:String,actor:Actor)  
  43.   
  44. object ActorWithReAct extends App {  
  45.   //启动Actor  
  46.   NameResolver.start()  
  47.   //发消息  
  48.   NameResolver!Net("www.baidu.com",self)  
  49.     
  50.   //接收消息  
  51.   println(self.receive{case msg => msg})  
  52. }  

good

顶部