読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

MailBox

MailBoxは、複数スレッド間での同期制御とメッセージの送受信をさくっとできるようにするユーティリティクラスです。

使い方は次のような感じ。

import scala.concurrent._  
import scala.concurrent.ops._ 

object MailBoxSample {
  
  // メッセージとしてやりとりするクラス
  private case class Value(i:Int)
  private case class End
  
  def main(args: Array[String]) {
    
    // メールボックス
    val m = new MailBox
    
    // メールボックスへのメッセージの送付を待ち受けるスレッド
    spawn { 
      var loop = true
      while( loop ) {
        // receiveでメールボックスにメッセージが送付されるのを待つ。
        val msg = m.receive( x => x match {
          case Value(i:Int) => i // Valueがメッセージで送付された場合、値を取り出して復帰
          case End => null // Endが送付された場合、nullを返す
        })
        
        // メッセージを処理
        if ( msg == null )
          loop = false // nullの場合ループを終了。
        else
          println( msg )
      } 
      println( "end." )
    }
    
    // メールボックスにメッセージを送るスレッド
    spawn { 
      0 to 10 foreach( i=> m send Value(i) ) // 1から10までを順に送付し、  
      m send End // 最後にEndを送る。
    }
  }
}

実行結果です。

0
1
2
3
4
5
6
7
8
9
10
end.