当前位置: 首页 > news >正文

java actor模型和消息传递简单示例

接上面java actor模型框架ujavaactor http://zhwj184.iteye.com/admin/blogs/1613351,上面的示例比较复杂,写一个简单点的示例:


import java.util.HashMap;
import java.util.Map;

import com.ibm.actor.AbstractActor;
import com.ibm.actor.Actor;
import com.ibm.actor.DefaultActorManager;
import com.ibm.actor.DefaultMessage;
import com.ibm.actor.Message;

public class TestActor extends AbstractActor {

	private Actor to;

	public void setTestActor(Actor sendTo) {
		this.to = sendTo;
	}

	@Override
	public void activate() {
		super.activate();
	}

	@Override
	public void deactivate() {
		logger.trace("TestActor deactivate: %s", getName());
		super.deactivate();
	}

	@Override
	protected void runBody() {
		DefaultMessage m = new DefaultMessage("message->from :" + getName(), 20);
		getManager().send(m, null, this);
	}

	@Override
	protected void loopBody(Message m) {
		String subject = m.getSubject();
		int count = (Integer) m.getData();
		if (count > 0) {
			m = new DefaultMessage("message->from :" + getName(), count - 1);
			System.out.println(getName() + ":" + subject + " data:" + m.getData());
			getManager().send(m, this, to);
		}

	}

	public static void main(String[] args) {
		DefaultActorManager am = new DefaultActorManager();
		Map<String, Actor> actors = new HashMap<String, Actor>();
		try {
			Map<String, Object> options = new HashMap<String, Object>();
			options.put(DefaultActorManager.ACTOR_THREAD_COUNT, 2);
			am.initialize(options);
			TestActor a = (TestActor) am.createActor(TestActor.class, "actor0");
			actors.put(a.getName(), a);
			TestActor b = (TestActor) am.createActor(TestActor.class, "actor1");
			actors.put(b.getName(), b);
			a.setTestActor(b);
			b.setTestActor(a);
			for (String key : actors.keySet()) {
				am.startActor(actors.get(key));
			}
			Thread.sleep(10000000);
			// am.terminateAndWait();
		} catch (Exception e) {
		}
	}
}

 输出:

actor0:message->from :actor0 data:19
actor1:message->from :actor1 data:19
actor1:message->from :actor0 data:18
actor0:message->from :actor1 data:18
actor1:message->from :actor0 data:17
actor0:message->from :actor1 data:17
actor0:message->from :actor1 data:16
actor1:message->from :actor0 data:16
actor1:message->from :actor0 data:15
actor0:message->from :actor1 data:15
actor0:message->from :actor1 data:14
actor1:message->from :actor0 data:14
actor0:message->from :actor1 data:13
actor1:message->from :actor0 data:13
actor0:message->from :actor1 data:12
actor1:message->from :actor0 data:12
actor1:message->from :actor0 data:11
actor0:message->from :actor1 data:11
actor0:message->from :actor1 data:10
actor1:message->from :actor0 data:10
actor0:message->from :actor1 data:9
actor1:message->from :actor0 data:9
actor1:message->from :actor0 data:8
actor0:message->from :actor1 data:8
actor0:message->from :actor1 data:7
actor1:message->from :actor0 data:7
actor1:message->from :actor0 data:6
actor0:message->from :actor1 data:6
actor0:message->from :actor1 data:5
actor1:message->from :actor0 data:5
actor1:message->from :actor0 data:4
actor0:message->from :actor1 data:4
actor1:message->from :actor0 data:3
actor0:message->from :actor1 data:3
actor1:message->from :actor0 data:2
actor0:message->from :actor1 data:2
actor1:message->from :actor0 data:1
actor0:message->from :actor1 data:1
actor1:message->from :actor0 data:0
actor0:message->from :actor1 data:0



转载于:https://www.cnblogs.com/secbook/archive/2012/07/31/2655152.html

相关文章:

  • C语言--库文件
  • C# 4.0 新特性
  • 一花一世界--VMware Horizon 部署 Step by Step Part 1
  • vi快捷键
  • 编译linux内核Documentation为man手册
  • 自定义标签
  • 前端代码标准最佳实践:CSS篇
  • oracle set和col命令的整理
  • [翻译]计划扑克牌: 避免工作量估算中的错误
  • 对于paip..net代码生成器使用方法的总结
  • 插入类排序
  • ASP.NET MVC ModelState与数据验证【转】
  • Xenserver中启动虚拟机失败Vdi is not available的另外一种处理方法
  • 网站制作 时光网11月4日又回来了
  • Oracle_Database_11g_标准版_企业版__下载地址_详细列表
  • 【翻译】babel对TC39装饰器草案的实现
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Consul Config 使用Git做版本控制的实现
  • css的样式优先级
  • DataBase in Android
  • JS函数式编程 数组部分风格 ES6版
  • Js基础——数据类型之Null和Undefined
  • JS数组方法汇总
  • Laravel Mix运行时关于es2015报错解决方案
  • Redis中的lru算法实现
  • Spark RDD学习: aggregate函数
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Unix命令
  • uva 10370 Above Average
  • vue-loader 源码解析系列之 selector
  • Zsh 开发指南(第十四篇 文件读写)
  • - 概述 - 《设计模式(极简c++版)》
  • 给新手的新浪微博 SDK 集成教程【一】
  • 区块链将重新定义世界
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 王永庆:技术创新改变教育未来
  • 我是如何设计 Upload 上传组件的
  • 一份游戏开发学习路线
  • 用Visual Studio开发以太坊智能合约
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • elasticsearch-head插件安装
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​ssh免密码登录设置及问题总结
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (4)logging(日志模块)
  • (5)STL算法之复制
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一) storm的集群安装与配置
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NetCore 如何动态路由
  • .net中调用windows performance记录性能信息