17.11 アクター

第 3 章で電子オークションサービスのプログラム実装例をざっと見ました。そのサービスは、パターンマッチングを使ってメールボックス中のメッセージを調べて動 く、高度なアクタープロセスに基づいています。アクターの洗練、最適化された実装は scala.actors パッケージに収められています。ここで、アクターライブラリの簡略化バージョンを見てみましょう。

次のコードは scala.actors パッケージの実装とは異なります。アクターの簡略バージョンをどのように実装できるか、の例として見てください。アクターが実際にどのように定義されてい るか、あるいは標準 Scala ライブラリにおける実装を記述するものではありません。後者については Scala APIドキュメントを参照してください。

簡略化されたアクターは、通信プリミティブがメールボックスのそれであるようなスレッドです。そのようなアクターは、MailBox クラスを備えた Java の標準 Threadクラスのミックスイン合成拡張として定義できます。 私たちは Thread クラスの run メソッドもオーバライドして、その act メソッドで定義されたアクター動作を実行させます。! メソッドは MailBox の send メソッドを呼び出すだけです。

abstract class Actor extends Thread with MailBox { def act(): Unit override def run(): Unit = act() def !(msg: Any) = send(msg) }