我正在使用Akka框架来控制硬件,在极少数情况下,我需要在计算中间冻结一个actor。这可以防止损坏硬件。有没有办法快速冻结或杀死和Actor,即使它还在运行任务?
答案 0 :(得分:5)
可悲的是,这不是JVM支持的。当一个线程正在运行时,例如做一些长时间运行的操作,它不能被任意中断(是的,有一个FindItem
调用,但它只是设置一个标志,以及线程的用户域代码可能会看这个标志,这不是一个强有力的中断)。由于Akka Actors使用Java线程,因此同样的限制适用于它们。
演员如何在这里提供帮助,但是你可以把工作分成很小的工作,思考"步骤",并将它们表示为消息。如果你发现你不应该继续下去,你只需要隐藏消息(或者只是对它们进行无操作,而不是执行某些操作)。
这取决于你的意思"冻结"。它本身是不可能的,但也许可以实现非常相似的效果?
//杀戮部分可以通过Actor内的interrupt()
或发送context stop self
来完成,但这是异步的并且通过Actors邮箱 - 作为actor通信中的所有内容。