scala actor阻止当前线程
发布时间:2020-12-16 18:11:31 所属栏目:安全 来源:网络整理
导读:我试图实现一个基于 Scala的actor API的计时器,当前的Thread actor(Actor.self)作为计时器和一个匿名的Actor,它完成需要及时完成的??工作. 我有以下Scala程序 import scala.actors.Actor.selfimport scala.actors.TIMEOUTobject Main { def main(args: Array
我试图实现一个基于
Scala的actor API的计时器,当前的Thread actor(Actor.self)作为计时器和一个匿名的Actor,它完成需要及时完成的??工作.
我有以下Scala程序 import scala.actors.Actor.self import scala.actors.TIMEOUT object Main { def main(args: Array[String]): Unit = { val thiz = self actor { // do heavy work here thiz ! "finish" } self.reactWithin(1000) { case "finish" => println("complete") case TIMEOUT => println("timeout") } } } 当我运行程序时,我收到了 Exception in thread "main" scala.actors.SuspendActorControl scala.actors.ActorProxy@1d99a4d: caught java.lang.InterruptedException 请告诉我解决问题的方法. 解决方法
你有两种类型的控制传递与scala-actors,线程阻塞或线程暂停.后者表示抛出控制异常(线程再次可用于线程池管理器),并且当消息进入其邮箱时重新执行actor主体.有关更多详细信息,请参阅
actors tutorial. “让它无线!”部分.
receiveWithin方法使用线程阻塞,而reactWithin使用暂停.你在这里遇到的问题是没有外部管理参与者捕获异常.这仅适用于“适当的”actor,而不适用于为主线程创建的代理.所以如果你想在显式actor之外的主线程上等待,你需要使用线程阻塞/ receiveWithin: self.receiveWithin(1000) { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |