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