Scala 並行処理のActorさん
ちょっと話が飛んじゃって申し訳ないのですが今勉強中の並行処理についてまとめてみます。Scalaでは並行処理のためにいくつか選択肢があり、そのうちのひとつがActorです。ではさっそく試しにコードを書いていきます。メッセージを受け取りそれに対応した値を返す処理を実装してみます。
→ Actorクラスをimport
→ Actorを継承したActorTest1クラスとそれをインスタンス化して実行する、Appを継承したActorTest1Mainオブジェクトを作成(Appを継承しないでメイン関数を使用してももちろんいいです)
→ 適当な変数(ここではvar active)にtrueをいれます。
→ Actorクラスの抽象メソッドであるact()を実装することにより詳細な処理を設定します
→ loopWhile()でループ処理
→ reactメソッドでcaseの処理を書き込む
→ ActorTest1MainにてActorTest1のインスタンスの作成
→ アクターをスタートさせる
→ アクターにメッセージを送る
package actor
import scala.actors.Actor
import java.util.Scanner
import java.io
class ActorTest1 extends Actor{
varactive=true
def act(){
println("Start!!")
loopWhile(active){
react{
case "red"=> println("あか")
case "blue"=> println("あお")
case "stop"=>{
println("End!")
active=false
}
case _ =>println("?")
}
}
}
}
object ActorTest1Main extends App{
var at1=new ActorTest1()
at1.start()
at1 ! "red"
at1 ! "stop"
}
以下が実行結果です。
Start!!
あか
End!
こんなかんじで非同期で動くアクターが実装できました。
正直まだしっくりはきてないのですががむばります…
※現在ScalaではActorが廃止、というよりはAkkaに取り込まれAkkaの利用が推奨されています