Akka线程安全与期货

时间:2015-05-12 19:40:56

标签: scala akka

我有一个有可变状态的演员。在我的receive方法中,我模式匹配消息并调用一些将返回Future的服务。这个Future将修改我的Actor实例中的状态。这个状态不是线程安全吗?由于Future将在不同的线程中执行,我的Actor中的状态是否保证是线程安全的?

1 个答案:

答案 0 :(得分:9)

不,这不是你正确假设的线程安全。期货在执行上下文提供的任何线程上运行。

解决这个问题的方法是将它传回给同一个演员。所有演员的输入必须始终是消息。您可以找到documentation here

一些示例代码:

import akka.pattern.pipe

//... inside the Actor somewhere:
val futureResult: Future[YourType] = something.thatReturnsAFuture()
futureResult.pipeTo(self)

然后修改你的接收块,以便在将来完成后处理结果并将其发送回此actor:

case result: YourType => //...