私はSWTとAkkaを組み合わせようとしています。 SWTウィジェットの1つは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 _ => ???
}
}
は、これらのコールバックの1の内側に自分自身にメッセージを送信する俳優とのいずれかのリスクがありますか?
私はここで取り組むべきより重要な問題は、彼がやっていることが俳優の状態を「クローズアップ」しているかどうかということです。コールバックが内部の可変状態にアクセスする別のスレッドで発生している場合、ある時点で1つのスレッドのみがアクターを実行できるという仮定をすべて破る可能性があります –