直接来自Akka docs:
Actors被设置为行为和状态的容器,拥抱这意味着不经常在消息中发送行为(使用Scala闭包可能很诱人)。其中一个风险是偶然在演员之间共享可变状态,不幸的是,违反演员模型会破坏所有使演员编程的属性如此美好。
绊倒我的是:
“...拥抱这意味着不要经常在消息中发送行为......”
有人可以通过“在消息中发送行为 ”给我一个具体的例子,然后解释这是如何违反“演员模型”的?
我正在使用Java API(而不是Scala),所以我只关心它与Java 8的关系。
答案 0 :(得分:3)
使用Java 8的具体示例:
someOther
如果synchronized
引用的Actor要执行我们发送给它的行为,那么它将使用我们的 ActorContext,而不是它自己的。这将导致未定义的行为,它打破了封装。一个Actor 一定不能调用另一个Actor上的任何方法。只有这样我们才能保证在Actor中你可以单线程编程,而不需要任何同步原语(如{{1}}或lock / semaphores)。
答案 1 :(得分:2)
不要在消息中发送一个函数(" behavior"),因为你可能会关闭另一个actor的内部状态。