日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/23 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Akka并发编程——第八节:Actor模型(七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節主要內容

停止運行Typed Actor

當Typed Actor不再需要時要將其停止,有3種方法停止Typed Actor的運行:
(1)通過system.shutdown()停止ActorSystem中所有的Typed Actor;
(2)調用TypedActor(system).stop(mySquarer)停止指定的Typed Actor;
(3)調用TypedActor(system).poisonPill(otherSquarer)停止指定的Typed Actor。
具體使用代碼如下:

/** 停止Typed Actor*/ object Example_3 extends App {import akka.event.Loggingimport scala.concurrent.{ Promise, Future }import akka.actor.{ TypedActor, TypedProps }import scala.concurrent.duration._trait Squarer {//fire-and-forget消息def squareDontCare(i: Int): Unit//非阻塞send-request-reply消息def square(i: Int): Future[Int]//阻塞式的send-request-reply消息def squareNowPlease(i: Int): Option[Int]//阻塞式的send-request-reply消息def squareNow(i: Int): Int}//混入PostStop和PreStartclass SquarerImpl(val name: String) extends Squarer with PostStop with PreStart {import TypedActor.contextval log = Logging(context.system,TypedActor.self.getClass())def this() = this("SquarerImpl")def squareDontCare(i: Int): Unit = i * idef square(i: Int): Future[Int] = Promise.successful(i * i).futuredef squareNowPlease(i: Int): Option[Int] = Some(i * i)def squareNow(i: Int): Int = i * idef postStop(): Unit={log.info ("TypedActor Stopped")}def preStart(): Unit={log.info ("TypedActor Started")}}val system = ActorSystem("TypedActorSystem")val log = Logging(system, this.getClass)//使用默認構造函數創建Typed Actorval mySquarer: Squarer =TypedActor(system).typedActorOf(TypedProps[SquarerImpl](),"mySquarer")//使用非默認構造函數創建Typed Actorval otherSquarer: Squarer =TypedActor(system).typedActorOf(TypedProps(classOf[Squarer],new SquarerImpl("SquarerImpl")), "otherSquarer")//Request-reply-with-future 消息發送val fSquare = mySquarer.square(10)val result = Await.result(fSquare, 5 second)log.info("fSquare="+result)//調用poisonPill方法停止Actor運行TypedActor(system).poisonPill(otherSquarer)//調用stop方法停止Actor運行TypedActor(system).stop(mySquarer)//system.shutdown() }

代碼運行結果如下所示。

[INFO] [03/21/2016 22:41:51.119] [TypedActorSystem-akka.actor.default-dispatcher-2] [$Proxy0(akka://TypedActorSystem)] TypedActor Started [INFO] [03/21/2016 22:41:51.123] [TypedActorSystem-akka.actor.default-dispatcher-2] [$Proxy1(akka://TypedActorSystem)] TypedActor Started [INFO] [03/21/2016 22:41:51.124] [main] [Example12_10$(akka://TypedActorSystem)] fSquare=100 [INFO] [03/21/2016 22:41:51.131] [TypedActorSystem-akka.actor.default-dispatcher-5] [$Proxy1(akka://TypedActorSystem)] TypedActor Stopped [INFO] [03/21/2016 22:41:51.131] [TypedActorSystem-akka.actor.default-dispatcher-3] [$Proxy0(akka://TypedActorSystem)] TypedActor Stopped
  • 1

代碼中類SquarerImpl 混入了PreStart和PostStop兩個trait:class SquarerImpl(val name: String) extends Squarer with PostStop with PreStart,這樣的話在創建TypedActor之前和停止TypedActor后能夠進行相應的操作,本例中主要是為監視TypedActor的創建和停止過程。代碼TypedActor(system).stop(mySquarer)通過stop方法停止TypedActor,而TypedActor(system)
.poisonPill(otherSquarer)通過調用poisonPill方法停止運行TypedActor。

總結

以上是生活随笔為你收集整理的Akka并发编程——第八节:Actor模型(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。