如何在 Scala 中编写计时器 Actor?
我需要一个演员每分钟发送一条消息。我如何最好地实现这种行为?据我所知,我担心使用 java.lang.Thread.sleep(long millis) ,因为线程可以在 Scala 中的许多参与者之间共享。
I need an actor to send a message every minute. How do I best achieve this behaviour? I am afraid of using java.lang.Thread.sleep(long millis)
as a thread can be shared among many actors in Scala, as far as I understand.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
或者正如 @Daniel 提到的,这里有一个运行示例:
Or as @Daniel mentioned, here a running example:
使用
receiveWithin
创建一个 Actor 来充当计时器。Create an actor with
receiveWithin
to act as the timer.您可以使用 Akka FSM 来建模保持
forMax 的 Actor
millis 处于等待状态,然后发送消息,例如,通过在使用onTransition
时切换到另一个状态并停留 0 millis 以切换回等待状态。 akka 页面上有一个很好的例子。You can use Akka FSM to model an actor that stays
forMax
millis in a waiting state and then sends a message, e.g. by switching to another state while usingonTransition
and staying there for 0 millis to switch back to waiting state. There is a good example at the akka page.当您想要线程时为什么要使用演员呢?
Why use an actor when a thread is what you want?
我最终创建了专用的 Runnable 实例,它不断向目标参与者发送消息。喜欢
I ended up in creation of dedicated Runnable instance, which keeps sending a message to the target actor. Like
由于 scala.actors 现已被弃用并被 akka Actor 取代(并且由于 akka Actor 中没有 React 或 receiveWithin ),因此以下是如何使用 akka Actor 来做到这一点(无论如何,它实际上比使用 receiveWithin 更不“黑客”) )。
下面的示例安排一个可运行对象在 5 秒后调用:
Since scala.actors is now deprecated and being replaced with akka actors (and since there is no react or receiveWithin in akka actors), here is how to do it using akka actors (it's actually less of a 'hack' than using receiveWithin anyways IMHO).
The example below schedule a runnable to be invoked after 5 seconds: