使用Java 手写一个简单的actor模型-只记录数据的
- Actor模型及Akka
- 时间:2023-05-06 13:56
- 3149人已阅读
简介
首先定义一个Actor接口,包含三个方法:onStart、onMessage和onStop。onStart方法在Actor启动时调用一次,onMessage方法在Actor接收到消息时调用,onStop方法在Actor停止时调用:public interface Actor<T> { void onS
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
首先定义一个 Actor 接口,包含三个方法:onStart、onMessage 和 onStop。onStart 方法在 Actor 启动时调用一次,onMessage 方法在 Actor 接收到消息时调用,onStop 方法在 Actor 停止时调用:
public interface Actor<T> { void onStart(); void onMessage(T message); void onStop(); }
接下来实现一个简单的 ActorSystem 类,负责创建和管理 Actor。它包括一个名为 actors 的 Map,用于存储所有 Actor 实例:
import java.util.HashMap; import java.util.Map; public class ActorSystem { private Map<String, Actor<?>> actors = new HashMap<>(); public <T> ActorRef<T> actorOf(Actor<T> actor, String name) { // 创建 ActorRef,并将 Actor 加入 actors 中 ActorRef<T> actorRef = new ActorRef<>(actor, name); actors.put(name, actor); return actorRef; } public void stop(Actor<?> actor) { actor.onStop(); actors.remove(actor); } }
ActorRef 是 Actor 的一个代理,它包装了 Actor 实例和 Actor 名称。通过 ActorRef,我们可以发送消息到 Actor。
public class ActorRef<T> { private Actor<T> actor; private String name; public ActorRef(Actor<T> actor, String name) { this.actor = actor; this.name = name; } public void send(T message) { actor.onMessage(message); } public String getName() { return name; } }
最后,定义几个具体的 Actor 实现,例如一个简单的 CounterActor,用于计数收到的消息数量:
public class CounterActor implements Actor<Integer> { private int count = 0; @Override public void onStart() { System.out.println("CounterActor started"); } @Override public void onMessage(Integer message) { count += message; System.out.println("CounterActor received message: " + message + ", total count: " + count); } @Override public void onStop() { System.out.println("CounterActor stopped"); } }
使用示例,创建一个 ActorSystem,创建一个 CounterActor,将它的 ActorRef 添加到 ActorSystem 中,然后向 CounterActor 发送两个消息:
public class Main { public static void main(String[] args) { ActorSystem system = new ActorSystem(); CounterActor counterActor = new CounterActor(); ActorRef<Integer> counterRef = system.actorOf(counterActor, "counter"); counterRef.send(1); counterRef.send(2); system.stop(counterActor); } }
执行上述程序后,将会输出:
CounterActor started CounterActor received message: 1, total count: 1 CounterActor received message: 2, total count: 3 CounterActor stopped
以上就是一个简单的 Java Actor 模型的实现。实现起来很简单,但是 Actor 模型很强大,可以用来实现高并发、分布式系统等。同时也可以结合其他框架,如 Akka 等,来实现更复杂的应用。