这可能是因为演员模型假定每个演员实例都按顺序处理其自己的邮箱。这意味着不应该发生两个或多个并发线程执行单个演员实例代码的情况。从技术上讲,您可以在演员类中创建一个方法(因为它仍然是一个对象),并从多个线程同时调用它,但这将是违反演员使用规则的重大偏离,并且您将“自担风险”,因为然后您将失去该模型的所有线程安全保证。这也是Akka引入ActorRef概念的原因之一-它是一个句柄,可让您通过消息传递与演员通信,而不是直接调用其方法。
演员是“Treadsafe”的。Actor系统(AKKA)为每个actor提供了自己的“轻量级线程”。这意味着这不是一个线程,但是AKKA系统将给开发人员留下一个Actor总是在其自己的线程中运行的印象。这意味着作为对消息操作的结果执行的任何操作,在所有目的上都是线程安全的。然而,你不应该通过使用可变消息或公共状态来削弱AKKA。如果您将演员开发为独立的功能单元,则它们将是线程安全的。另请参见: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State 以及 http://doc.akka.io/docs/akka/2.3.12/general/jmm.html,更深入地研究AKKA内存模型及其如何管理“线程”问题。