3
我想结合使用SWT和Akka。其中一个SWT小部件是Browser
,它嵌入了一个Web浏览器,并允许JS代码通过BrowserFunction
对象中的回调函数调用JVM代码。Akka:从回调中发送消息给自己是否安全?
我有以下代码:
import org.eclipse.swt.widgets.Composite
import org.eclipse.swt.browser._
import akka.actor.Actor
class MyActor(parentComposite: Composite) extends Actor {
private var mutableContent: Any = ???
val browser = new Browser(parentComposite, SWT.BORDER)
val browserFunction = new BrowserFunction(browser, "JS_CallableFunctionName") {
val ref = context.self
override def function(arguments: Array[Object]): Object = {
ref ! "Is it safe to send a message to myself?"
null
}
}
def receive = {
case _ => ???
}
}
是否有与演员发送消息给自身内部这些回调的一个什么风险吗?
我认为这里要解决的更重要的问题是他所做的是“超过”演员的状态。如果回调在不同的线程上发生,并且访问内部可变状态,则可能会打破整个假设,即在任何给定时间只有一个线程可以穿过演员 –