Akka是JAVA虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言编写,同时提供了Scala和Java的开发接口。Akka处理并发的方法基于Actor模型,Actor之间通信的唯一机制就是消息传递。

Akka特点:

对并发模型进行了更高的抽象

是异步、非阻塞、高性能的事件驱动编程模型

是轻量级事件处理(1GB内存可容纳百万级别个Actor)

它提供了一种称为Actor的并发模型,其粒度比线程更小,你可以在系统中启用大量的Actor。

它提供了一套容错机制,允许在Actor出现异常时进行一些恢复或重置操作。

Akka既可以在单机上构建高并发程序,也可以在网络中构建分布式程序,并提供位置透明的Actor定位服务。

maven依赖:

Actor模型

在并发程序中线程是并发程序的基本执行单元,但在Akka中执行单元是Actor。

传统并发程序是基于面向对象的方法,通过对象的方法调用进行信息传递,如果对象的方法修改对象本身的状态,在多线程下就可能出现对象状态的不一致,此时就必须对方法调用进行同步,而同步操作会牺牲性能。

在Actor模型中并不是通过Actor对象的某个方法来告诉Actor需要做什么,而是给Actor发送一条消息。当一个Actor收到消息后,它有可能根据消息的内容做出某些行为,如更改自身状态,此时这个状态的更改是Actor自身进行的,并非由外界干预进行的。

Greeter定义

HelloWorld定义

sample.conf

main方法

运行结果

第一行打印了HelloWorld Actor的路径,它是系统内第一个被创建的Actor。路径为:akka://hello/user/helloworld。第一个hello表示ActorSystem的系统名称,即构造时第一个入参。user表示用户Actor,所有的用户Actor都会挂载在user路径下。最后helloworld是这个Actor的名字。

第二行打印了Greeter Actor的路径,三、四行为Greeter中输出的信息。

第五行表示系统遇到了一条消息投递失败,原因是HelloWorld将自身停止了,导致Greeter发送的信息无法成功投递。

当使用Actor进行并发开发时,关注点已经不在线程上了,线程调度已经被Akka框架进行封装,只需关注Actor对象即可。Actor对象之间的通过显示的消息发送来传递信息。

当系统内有多个Actor时,Akka会自动在线程池中选择线程来执行我们的Actor,不同的Actor可能会被同一个线程执行或者一个Actor可能被不同的线程执行。

注意:不要在一个Actor中执行耗时的代码,这样可能会导致其他Actor的调度出现问题。

消息投递

Akka应用是由消息驱动的,消息是除Actor之外最重要的核心组件。在Actor之间传递的消息应该满足不变性,即不变模式,可变的消息无法高效的在并发环境中使用。在Akka中推荐使用不可变对象。在代码中可以使用final字段声明,在消息构造完成后,就不能再发生改变了。

消息投递策略:

至多一次投递:此策略中每一条消息最多会被投递一次,可能会偶尔出现投递失败的情况,从而导致消息丢失。此策略高性能。

至少一次投递:此策略中每一条消息至少会被投递一次,直至成功。在一些偶然的情况,接收者可能会收到重复消息,但消息不会丢失。此策略需要保存消息投递的状态并不断重试。

精确投递:所有消息保证被精确的投递并成功接收一次,既不会丢失也不会重复。此策略成本最高且不易实现。

关于消息的可靠性:没有必要在Akka层保证消息的可靠性,这样做成本太高且无必要。消息可靠性应该在应用的业务层进行保证,有时丢失一些消息是符合应用要求的。

消息投递的顺序性:Akka可以保证在一定程度上的投递顺序性。如Actor A1向A2顺序发送了M1、M2、M3三条消息,Actor A3想A2顺序发送了M4、M5、M6三条消息,则系统可以保证:

如果M1无丢失,它一定先于M2、M3被A2收到。

如果M2无丢失,它一定先于M3被A2收到。

如果M4无丢失,它一定先于M5、M6被A2收到。

如果M5无丢失,它一定先于M6被A2收到。

对于A2来说,来自A1向A3的消息并没有顺序性保证。

另外这种消息投递规则不具备可传递性,如下图:

C收到M1和M2的顺序是没有保证的

--参考文献《实战Java高并发程序设计》

java actor akka_Akka框架简介相关推荐

  1. 【Java】SSM框架简介

    1.什么是SSM框架? SSM框架是Spring.SpringMVC和MyBatis框架的总结,是比较标准的MVC模式.标准的SSM框架分为持久层.业务层.表现层.视图层. Spring 实现业务对象 ...

  2. Java框架有哪些?Java开发十二大框架简介

    1.Spring 框架 Spring框架是现在Java后端框架家族里面最强大的一个,拥有IOC和AOP两大利器,简化了开发的复杂性.而且Spring现在能与所有主流开发框架集成,是一个万能框架,Spr ...

  3. java常见开源框架简介

    对于一般常见的框架,在和别人交谈或者看见项目用到了,知道是干什么用的就够了.开始垒高楼gogo 1.Apache Shrio 介绍 Apache Shiro™是一个功能强大且易于使用的Java安全框架 ...

  4. Java开源——常见J2EE框架简介

    Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...

  5. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

    文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...

  6. Java字节码框架ASM简介

    Java字节码框架ASM简介 1. ASM概述 1.1 ASM简介 1.2 ASM提供API 1.3 ASM核心模块 2. ASM应用 2.1 ASM依赖 2.2 代码实现 2.3 测试验证 1. A ...

  7. android java框架_Android 框架简介:java框架

    Android 框架简介:java框架 2015-10-15 14:43  来源: 正保IT教育网整理 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节的内容 ...

  8. 【职坐标】java集合框架简介

    Java集合之集合框架 一.   什么是集合框架 a)   "集合框架"由一组用来操作对象的接口组成.不同接口描述不同类型的组 二.   集合的优缺点及用途 a)   创建接口特定 ...

  9. Java学习笔记——类集框架简介

    Java类集框架 类集指的就是一套动态对象数组的实现方案,在实际开发之中没有任何一项开发可以离开数组,但是传统的数组实现起来非常的繁琐.而且长度是其致命伤,正是因为长度的问题,传统的数组是不能大范围使 ...

最新文章

  1. 人工智能技术在内容行业的应用:AI对中长尾内容平台还是奢侈品
  2. 智慧树插件会被发现吗_输尿管也会得肿瘤?能早期发现吗?
  3. 代理模式 、JDK动态代理、cglib动态代理
  4. python将2个列表list合并到1个列表使用appenden_【新手入门】20个很实用的 Python 学习小技巧...
  5. 降低winnt Apache服务的权限,让你的虚拟主机更安全
  6. linux非权限安装bioperl,Bioperl的简单安装
  7. 好几个div(元素)找到最后一个
  8. 【vue项目实战】Vue工程化项目--猫眼电影移动端(三)
  9. 打包2阶段-使用reshacker修改打包信息
  10. Thanks, Steve Jobs!
  11. 自动切换输入法--Mac高效切换输入法工具
  12. 如何炸掉……呃,月球?
  13. angular async和await (实用)
  14. 机器学习实战2--蒙特卡洛方法与Q-Q图(2022/10/12)
  15. 同济大学高等数学上册第四章不定积分以及每日一题
  16. 启动Tomcat报错- jar not loaded. Offending class: javax/servlet/Servlet.class
  17. 磁盘体系结构和磁盘阵列技术(RAIDLVM)及分区实践
  18. oracle存储过程和触发器结合database link的实例
  19. Android手机音频采样率,手机音质差?提升音质必备App了解下
  20. 瑞星升级提示网络连接失败网络配置后重试12007

热门文章

  1. 不带框架的java后端实现微信小程序登录(三层)
  2. 【N32G457 】基于RT-Thread和N32G457的电子墨水屏电子钟
  3. anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions
  4. 微博的自定义Android,Android ProgressBar 自定义样式(二),仿原来新浪微博图片加载样式...
  5. 【操作类】使用file-saver导出excel
  6. 邮政社招笔试题库_银行招聘考试题库:中国邮政储蓄银行社招行测模拟卷(十)...
  7. Gromacs统计原子间距离,生成csv格式文件
  8. 聚焦四大热点议题畅想智慧医疗未来 OFweek2019中国智慧医疗产业大会成功举办!
  9. BCD码转二进制的数学原理
  10. python计算方位角_[宜配屋]听图阁