本节主要内容

停止运行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模型(七)相关推荐

  1. 【Akka】Akka并发编程设计

    1.概述 转载:Akka并发编程设计 2. 响应式系统设计 Akka 被称为是一个响应式平台,更具体的说,它是 Typesafe 响应式平台的一部分.响应式宣言中包含了 4 个准则,也可以说是设计目标 ...

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

    主要内容: 1. Typed Actor定义 2. Typed Actor创建 3. 消息发送 1. Typed Actor定义 Akka中的Typed Actor是Active Objects设计模 ...

  3. Akka并发编程——第六节:Actor模型(五)

    本章主要内容: 1. !消息发送,Fire-and-Forget消息模型 2. ?消息发送,Send-And-Receive-Future消息模型 Akka提供了两种消息模型:fire-and-for ...

  4. Akka并发编程——第二节:Actor模型(一)

    本节主要内容 定义Actor 创建Actor 1. 定义Actor 通过扩展akka.actor.Actor 特质并实现receive方法来定义Actor,代码示例如下 //通过扩展Actor并实现r ...

  5. 并发机制:CSP vs Actor模型以及Golang实现

    作者:花与火山石 原文链接:https://blog.csdn.net/qq_32702033/article/details/104415434 CSP & Actor Model 本文将简 ...

  6. 并发编程——进程——生产者消费者模型

    一.生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务. 在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者 ...

  7. Akka并发编程——第五节:Actor模型(四) 停止Actor

    本节主要内容: 1. 停止Actor 1. 停止Actor (1)通过ActorSystem.shutdown方法停止所有 Actor的运行 /* *停止Actor:ActorSystem.shutd ...

  8. Akka并发编程——第三节:Actor模型(二)

    本节主要内容: Actor API解析 1. Actor API解析 Actor中的主要成员变量和方法定义如下: package akka.actor trait Actor extends scal ...

  9. Java并发编程:Java内存模型JMM

    简介 Java内存模型英文叫做(Java Memory Model),简称为JMM.Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性. CPU和缓存一 ...

最新文章

  1. Android UI体验之全屏沉浸式透明状态栏效果
  2. filezilla 设置filezilla使用明文密码_详解WordPress使用FTP上传主题和插件
  3. pl sql代码提示手动提示设置
  4. C#如何直接调用非托管代码
  5. spark节点安装numpy(在线方式,最简洁方式)
  6. 在ASP.NET中基于Owin OAuth使用Client Credentials Grant授权发放Token
  7. 一键批量检测微信是否被好友删除,支持最新版微信
  8. beetle-j2ee-application-framework框架介绍.md
  9. FOXIT PDF SDK 8.1 ALL Crack
  10. trans系列是sci几区_怎么确定SCI论文期刊是几区的?
  11. idm下载速度只有几十kb idm下载速度慢解决办法
  12. python 取整求余函数
  13. Lunix入门到精通-网络排查工具 MTR
  14. C# WPF 建立无边框(标题栏)的登录窗口的示例
  15. Python和JavaScript间代码转换4个工具
  16. 在线协助设计软件,figma、sketch、xd哪个才是你的优先选择
  17. Matlab矩阵幂运算
  18. Alertmanager报警使用webhook飞秋通知
  19. java 多线程 map_多线程Map并发读后修改
  20. SonicWall防火墙销量超300万套,合作伙伴项目报备量增长50%,

热门文章

  1. 高效万进制——蓝桥杯|HDOJ 1002 大数加法——30行代码AC
  2. 开放寻址法VS链表法
  3. 关于ensp配置出现 Error: Please renew the default configurations.
  4. C++编程练习:多态实验——设计一个基类Shapes,Shapes类公有派生产生矩形类Rectangle和圆类Circle
  5. c语言 输入若干字符串 用指针和一位数组 冒泡排序,C 语言作业 - 1 - 指针使用与冒泡排序...
  6. linux降内核版本_ubuntu16.04降级内核版本至3.13.0-85
  7. 计算机安全知识课堂导入设计,“计算机安全与防护教学设计”教学设计.doc
  8. linux中断响应时间太慢_linux+arm系统学习与基础学习
  9. linux笔记之 搭建本地yum源,网卡的基本操作
  10. struts上传文件,验证失败表单数据丢失的原因