在Akka消息中发送行为

时间:2015-06-05 18:50:18

标签: java akka actor

直接来自Akka docs:

  

Actors被设置为行为和状态的容器,拥抱这意味着不经常在消息中发送行为(使用Scala闭包可能很诱人)。其中一个风险是偶然在演员之间共享可变状态,不幸的是,违反演员模型会破坏所有使演员编程的属性如此美好。

绊倒我的是:

  

“...拥抱这意味着不要经常在消息中发送行为......”

有人可以通过“在消息中发送行为 ”给我一个具体的例子,然后解释这是如何违反“演员模型”的?

我正在使用Java API(而不是Scala),所以我只关心它与Java 8的关系。

2 个答案:

答案 0 :(得分:3)

使用Java 8的具体示例:

someOther

如果synchronized引用的Actor要执行我们发送给它的行为,那么它将使用我们的 ActorContext,而不是它自己的。这将导致未定义的行为,它打破了封装。一个Actor 一定不能调用另一个Actor上的任何方法。只有这样我们才能保证在Actor中你可以单线程编程,而不需要任何同步原语(如{{1}}或lock / semaphores)。

答案 1 :(得分:2)

不要在消息中发送一个函数(" behavior"),因为你可能会关闭另一个actor的内部状态。