scala akka- 笔记 1

前言

我发现我太懒了,说好的学习scala顺便做笔记,然后就没有然后了。这次继续看吧,能记多少记多少。

第一个例子

package zhenghui.akka.actor

import scala.actors.Actor

/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :21:23
 */
object HelloActor extends Actor{
  override def act(): Unit = {
    println(Thread.currentThread().getName)
    println("hello actor.")
  }

  def main(args: Array[String]) {
    HelloActor.start()
  }
}
写道
actor最简单的例子。这个例子看起来就像是实现了一个Runnable,然后start一下。

匿名scala 

package zhenghui.akka.actor

import scala.actors.Actor
import Actor._

/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :21:37
 */
object HelloActor2 {

  def main(args: Array[String]) {
    actor {
      println(Thread.currentThread().getName)
      println("hello actor.")
    }.start()
  }
}
写道
好吧,就是一个匿名actor而已。不用定义这么多actor了

发送和接受消息

package zhenghui.akka.actor

import scala.actors.Actor._
/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :21:37
 */
object ActorMessage {

  def main(args: Array[String]) {
    val actor_message = actor {
      while (true){
        receive{
          case msg => println(s"receive msg:$msg")
        }
      }
    }

    actor_message ! "hello actor"
  }

}
写道
这个感觉就和java的runabble线程不一样了。这里可以接收消息,并且用一个偏函数接收到消息并做处理。
这个 receive 和 ! 很有趣。

自身类型作为actor 

package zhenghui.akka.actor

import scala.actors.Actor._

/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :22:07
 */
object ActorMessage2 {


  def main(args: Array[String]) {
    self ! "hello actor"

    self receive{case msg => println(msg)}
  }
}
写道
感觉很有趣啊。这种写法。

case class作为消息类型

package zhenghui.akka.actor

import scala.actors.Actor._

/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :22:12
 */
object ActorMessage3 {

  def main(args: Array[String]) {
    self ! Message("hello scala ")

    self receive{case Message(name) => println(name)}
  }
}

case class Message (name:String)
写道
case class 或者case object 作为消息体类型,外加scala的模糊匹配,真当是绝配

发送者与接受者的通信

package zhenghui.akka.actor

import scala.actors.Actor._

/**
 * user: zhenghui on 2016/1/15.
 * date: 2016/1/15
 * time :22:19
 */
object ActorMessage4 {

  def main(args: Array[String]) {

    val receiveActor = actor{
      receive{
        case msg =>
          println(msg)
          sender ! "hello sender"
      }
    }

//    actor{
//      receiveActor ! "hello receiver "
//      receive{case msg => println(msg)}
//    }

    receiveActor ! "hello receiver2 "
    self receive{case msg => println(msg)}

  }
}
写道
我忽然想起来,如果要写一个java的线程通信,那有多困难。

猜你喜欢

转载自chenjingbo.iteye.com/blog/2271483