Akka并发编程——第七节:Actor模型(六)

  • 时间:
  • 浏览:0
  • 来源:uu快3诀窍_uu快3app安卓_导航网

代码运行结果如下:

[INFO] [03/21/2016 21:15:60 .592] [main] [Example12_9(akka://TypedActorSystem)]oSquare=Some(60 )[INFO][03/21/201621:15:60 .649][main][Example129(akka://TypedActorSystem)] iSquare=60

[INFO] [03/21/2016 21:15:60 .649] [main] [Example12_9$(akka://TypedActorSystem)] fSquare=60

Akka中的Typed Actor是Active Objects设计模式的实现,Active Objects模式将措施的执行和措施的调用进行解耦合,从而为线程引入并发性。Typed Actor由公用的接口和对应实现两主次构成,其里边高度次的实现使用的是代理模式,即通过使用JDK中的动态代理来实现,在调用接口的措施时自动采集到实现接口的对象上。Typed Actor的定义[ ]如下所示。

trait Squarer中定义了另有另一个措施:

(1)def squareDontCare(i: Int): Unit措施:返回值类型为Unit,它相似于Untyped Actor中的fire-and-forget消息发送模型,即!和tell措施调用。

(2)def square(i: Int): Future[Int]:返回值类型为Future[Int],它相似于Untyped Actor中的send-request-reply消息发送模型,即?和ask措施调用,此种调用是非阻塞的。

(3)def squareNowPlease(i: Int): Option[Int]:返回值类型为Option[Int](Option类不还可以是scala.Option[_]不还可以能是akka.japi.Option

里边代码演示的是使用构造函数和非默认构造函数创建Typed Actor,其中Squarer为代理的类型,SquarerImpl为具体实现的类型。

代码mySquarer.squareDontCare(10)是单向消息发送,措施将在另外另有另一个线程上异步地执行;val oSquare = mySquarer.squareNowPlease(10)、val iSquare = mySquarer.squareNow(10)为Request-reply消息发送,在特定时间内以阻塞的措施执行,对于.squareNowPlease(10)措施不可能 在对应时间内没哟返回结果则返回值为None,怎么让返回值为Option[Int]类型,对于squareNow(10)措施不可能 在对应时间内无返回值则会抛出异常java.util.concurrent.TimeoutException,怎么让返回Int类型值;val fSquare = mySquarer.square(10)为Request-reply-with-future式的消息发送,以非阻塞的措施执行,不还可以通过val result = Await.result(fSquare, 5 second)获取执行结果。完正代码如下所示。

主要内容:

1. Typed Actor定义

2. Typed Actor创建

3. 消息发送

通过下列代码创建Typed Actor实例。