μJavaActors 是 actor 系统的一个简单的 Java 实现。只有 1,200 行代码,μJavaActors 虽然很小,但很强大。在下面的练习中,您将学习如何使用 μJavaActors 动态地创建和管理 actor,将消息传送给它们。
μJavaActors 围绕 3 个核心界面而构建:
-
消息 是在 actor 之间发送的消息。
Message
是 3 个(可选的)值和一些行为的容器:-
source
是发送 actor。 -
subject
是定义消息含义的字符串(也称为命令)。 -
data
是消息的任何参数数据;通常是一个映射、列表或数组。参数可以是要处理和/或其他 actor 要与之交互的数据。 -
subjectMatches()
检查消息主题是否与字符串或正则表达式匹配。
DefaultMessage
。 -
-
ActorManager 是一个 actor 管理器。它负责向 actor 分配线程(进而分配处理器)来处理消息。
ActorManager
拥有以下关键行为或特征:-
createActor()
创建一个 actor 并将它与此管理器相关联。 -
startActor()
启动一个 actor。 -
detachActor()
停止一个 actor 并将它与此管理器断开。 -
send()/broadcast()
将一条消息发送给一个 actor、一组 actor、一个类别中的任何 actor 或所有 actor。
ActorManager
,但如果您希望管理多个线程和/或 actor 池,也可以有多个ActorManager
。此接口的默认实现是DefaultActorManager
。 -
-
Actor 是一个执行单元,一次处理一条消息。
Actor
具有以下关键行为或特征:- 每个 actor 有一个
name
,该名称在每个ActorManager
中必须是惟一的。 - 每个 actor 属于一个
category
;类别是一种向一组 actor 中的一个成员发送消息的方式。一个 actor 一次只能属于一个类别。 - 只要
ActorManager
可以提供一个执行 actor 的线程,系统就会调用receive()
。为了保持最高效率,actor 应该迅速处理消息,而不要进入漫长的等待状态(比如等待人为输入)。 -
willReceive()
允许 actor 过滤潜在的消息主题。 -
peek()
允许该 actor 和其他 actor 查看是否存在挂起的消息(或许是为了选择主题)。 -
remove()
允许该 actor 和其他 actor 删除或取消任何尚未处理的消息。 -
getMessageCount()
允许该 actor 和其他 actor 获取挂起的消息数量。 -
getMaxMessageCount()
允许 actor 限制支持的挂起消息数量;此方法可用于预防不受控制地发送。
AbstractActor
的抽象类,actor 实现基于该类。 - 每个 actor 有一个
图 1 显示了 actor 之间的关系。每个 actor 可向其他 actor 发送消息。这些消息保存在一个消息队列(也称为邮箱;从概念上讲,每个 actor 有一个队列,当 ActorManager
看到某个线程可用于处理消息时,就会从队列中删除该消息,并将它传送给在线程下运行的 actor,以便处理该消息。
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// Create a mailbox factory with a pool of 10 threads. MailboxFactory mailboxFactory = JAMailboxFactory.newMailboxFactory( 10 );
// Create and initialize a Test actor. Mailbox mailbox = mailboxFactory.createAsyncMailbox(); //.createMailbox();
MyActor actor = new MyActor();
actor.initialize(mailbox); // Send a MyRequest request and wait for completion. JAFuture future = new JAFuture();
long ct = System.currentTimeMillis();
System.out.println(MyRequest.req.send(future, actor)); // Shut down the thread pool. mailboxFactory.close(); |
相关推荐
例如,提到的"actor开源代码分享"可能是指一个基于Java实现的Actor模型框架,如Akka或JActors。Akka是用Scala编写的,但也可以很好地与Java集成,它提供了一套强大的工具来构建高度并发、分布式的系统。JActors则是...
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。 示例代码: // Create a mailbox factory with a ...
Java Actor模型是一种并发编程模型,源自于Scala语言,但也可以在Java中实现。该模型基于actor的概念,每个actor都是一个独立的执行单元,拥有自己的状态并与其他actor通过异步消息传递进行通信。这种方式极大地简化...
Akka 是一个强大的工具包和框架,主要用于构建高度并发、分布式和反应式的应用程序,它基于actor模型。...通过这些步骤,你可以成功地使用Akka和Java实现TCP远程调用,构建出高性能、高并发的分布式系统。
1. **Scala语言特性**:Scala将面向对象和函数式编程结合在一起,并有强大的类型系统,可以编译成Java字节码,在JVM上运行。 2. **Akka框架**:Akka提供了一组可扩展的工具,用于构建并发和分布式应用程序。它利用...
java实现邮件邮件源码PCD-演员 一个模拟系统,抽象了 . 该系统必须被视为模拟,因为主要组件有意保留为抽象的。 系统的主要抽象类型如下: Actor :这个类型代表一个actor,它可以接收消息并做出相应的React Message...
这个"actors-in-java"项目看起来是一个实验性的框架,用于在Java中实现Actor模型,尽管它可能并不适合实际生产环境,而是用于学习和探索Actor模型的工作原理。 Actor模型的核心思想是将计算过程分解为独立的、并发...
这种实现方法通过Java内置的多线程机制实现了高效的并行计算,提供了相当的加速效果。 另一种实现是基于Theatre actor系统的。Actor模型是一种并发计算模型,其中每个actor都是一个独立的实体,拥有自己的状态,并...
Java 协程实现Akka是将传统的线程模型与轻量级、低开销的并发机制相结合的一种方式。Akka是用Scala编写的,但在Java中也可以方便地使用,它提供了一个强大的actor模型来处理并发问题,使得在高度并行和分布式系统中...
【Java实现工作流】 在IT领域,工作流(Workflow)是一种用于管理业务流程的方法,它自动化了业务操作,使得组织可以更有效地管理其业务过程。Java作为一种强大的编程语言,提供了丰富的库和框架来实现工作流,使其...
Java actor API,带有 Akka 的实现。 它最初是一个使 Java Akka 更容易使用的库。 然而,通过它的演变,很明显 API 的客户端根本不需要依赖 Akka; 他们的需求可以通过对任何演员系统提供者通用的演员 API 来满足。...
多线程、Actor模型、协程和进程是实现并行计算的四种常见方式。 一、多线程(Multi-Threading) 多线程是并发编程的基础,允许一个应用程序同时执行多个任务。在Java、C#等语言中,多线程通过创建和管理线程来实现...
标签“Scala”、“akka”和“actor”表明这个示例主要关注的是使用Scala语言来实现Akka Actor系统。Akka框架不仅包括Actors,还包括Streams、Cluster和HTTP等组件,用于构建复杂的、可扩展的应用程序。 至于压缩包...
总结,`akka-actor-1.0-RC2.jar.zip`是一个包含Akka Actor库的压缩包,它提供了一种有效的并发编程模型,通过Actor系统实现了消息驱动的反应式编程。理解并熟练使用Akka Actor,可以帮助开发者构建出高效、可扩展且...
这是一个Java Archive(JAR)文件,包含了Akka Actor模块的类库,供Java或Scala项目引用。在Java项目中,可以通过在类路径中包含这个JAR文件,导入必要的依赖,以便使用Akka Actor的功能。对于Maven或Gradle用户,...
Java调用VTK(Visualization Toolkit)是一种在Java应用程序中实现三维可视化的方法。VTK是一个开源的,跨平台的库,广泛用于科学数据和图像处理,它提供了强大的图形渲染和建模功能。以下是对如何在Java中集成和...