- 浏览: 636025 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (213)
- JAVA (53)
- Tomcat (14)
- EXTJS专栏 (2)
- 数据库 (23)
- JavaScript (13)
- jQuery (11)
- 需求分析 (2)
- css (1)
- 手机 (1)
- php (7)
- 生活 (1)
- ssh (11)
- JFReeChart (2)
- Delphi (1)
- junit (0)
- liunx (10)
- 项目管理 (11)
- 文件下载 (1)
- Eclipse (2)
- jsp (2)
- 外挂、游戏 (1)
- 面试题 (8)
- 性能测试 (2)
- apache (1)
- MyBatis (1)
- Webservice (2)
- ant (1)
- IDEA (2)
- log4j (1)
- 小程序 (1)
最新评论
-
hll127:
请问service这个方法里为什么要while(true)啊? ...
jsp页面静态化例子 -
tarena1:
Spring 源码解读 推荐流程 -
konglx:
springaop_springmvc 写道可以参考最新的文档 ...
Web项目添加Maven支持步骤 -
springaop_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Web项目添加Maven支持步骤 -
9976:
很好,谢谢
Spring 源码解读 推荐流程
例子:
1.调用普通方法
主方法
public static void main(String[] args) { // 初始化异步工作服务 AsynService anycService = AsynServiceImpl.getService(300, 3000L, 100, 100,1000); //异步工作缓冲处理器 anycService.setWorkQueueFullHandler(new CacheAsynWorkHandler(100)); //服务启动和关闭处理器 anycService.setServiceHandler(new FileAsynServiceHandler()); //异步工作执行异常处理器 anycService.setErrorAsynWorkHandler(new DefaultErrorAsynWorkHandler()); // 启动服务 asynService.init(); // 异步回调对象 AsynCallBack back = new TargetBack(); for (int i = 0; i < 1000; i++) { // 添加加异步工作- TargetService 的 test 方法 ,方法参数 asynej+ i asynService.addWork(TargetService.class, "test", new Object[] { "asyn4j" + i },new TargetBack()); //实例化目标对象再调用 // TargetService targetService = new TargetService (); //asynService.addWork( // targetService , "test",new Object[] { "asyn4j" + i }, new TargetBack()); } }
回调方法
//回调需继承AsynCallBack抽象类 public class TargetBack extends AsynCallBack { @Override public void doNotify() { //输出异步方法调用结果 System.out.println(this.methodResult); } }
目标对象
//异步调用对象 public class TargetService { public String test(String name){ System.out.println(name +" test is execute!"); return name; } }
2.调用Spring Bean的异步方法
调用 Spring testBean 的 myName 方法
applicationContext.xml 加入 <bean id="springBeanUtil" class="com.googlecode.asyn4j.spring.AsynSpringUtil"> </bean> <bean id="asynService" class="com.googlecode.asyn4j.spring.AsynServiceFactoryBean"> <!--设置自定义相关参数--> <property name="maxCacheWork" value="100"></property> <property name="addWorkWaitTime" value="2000"></property> <property name="workThreadNum" value="3"></property> <property name="callbackThreadNum" value="2"></property> <property name="closeServiceWaitTime" value="2000"></property> <!--添加相关处理器--> <property name="errorAsynWorkHandler"> <bean class="com.googlecode.asyn4j.core.handler.DefaultErrorAsynWorkHandler"/> </property> <property name="workQueueFullHandler"> <bean class="com.googlecode.asyn4j.core.handler.CacheAsynWorkHandler"/> </property> <property name="asynServiceHandler"> <bean class="com.googlecode.asyn4j.core.handler.FileAsynServiceHandler"/> </property> </bean> public class TestMain { public AsynService asynService; public void setAsynService(AsynService asynService) { this.asynService = asynService; } public void maintest(){ for(int i=0;i<10000;i++){ asynService.addWork("testBean", "myName",new Object[] { "panxiuyan" + i }); } } }
3.相关处理器
3.1异步工作缓冲器--(当工作队列工作数超过maxCacheWork时由处里器处理)
AsynService anycService = AsynServiceImpl.getService(300, 3000L, 100, 100); anycService.setWorkQueueFullHandler(new CacheAsynWorkHandler(100)); anycService.init();
当工作队列中的工作超过300个时,异步工作将由CacheAsynWorkHandler处理;
自定义处理器 继承 WorkQueueFullHandler 抽象类
3.2服务启动和关闭处理器 --(当服务启动和关闭调用)
anycService.setCloseHander(new FileAsynServiceHandler("c:/asyn4j.data"));
设置c:/asyn4j.data为持久化文件 FileAsynServiceHandler 是 AsynServiceHandler 的一个例子将任务持久化到文件,当系统启动时加载文件内容到内存,关闭时将未执行的任务持久化到文件。大家可以参考源码将任务持久化到别外的地方(memcached)
自定义处理器 继承 AsynServiceHandler 抽象类
3.3异步工作执行异常处理器 --(当工作执行出现异常时处理器)
anycService.setErrorAsynWorkHandler(new DefaultErrorAsynWorkHandler());
自定义处理器 继承 ErrorAsynWorkHandler 抽象类
3.4所有处理器为可选配置,建议根据自己的业务继承相关的类实现自己的处理器
4.异步工作优级
分成三个等级WorkWeight.LOW,WorkWeight.MIDDLE, WorkWeight.HIGH 默认优先级为WorkWeight.MIDDLE 。
API说明
一.默认构造函数
AsynServiceImpl.getService();
采用的默认参数为,
- (maxCacheWork)最大工作队列缓存工作数 – 300(默认值)
- (addWorkWaitTime)当工作队列满时添加工作等待时间-- Long.MAX_VALUE(默认值)
- (workThreadNum)异步工作执行线程池大小 ---- CPU核数/2 +1(默认值)
- (callBackThreadNum)回调执行线程池大小 --- CPU核数/2(默认值)
- (closeServiceWaitTime) 服务关闭等待时间 ---- 60000s(默认值)
二.自定义参数构造函数,参数顺序对应前面的说明
AsynServiceImpl.getService (1000, 1000L, 3, 2,60 * 1000);
AsynServiceImpl 是线程安全的,可以初始化一个实例,所有程序再引用.
三.设置缓存工作队列处理器(在init方法调用前设置)
public void setWorkQueueFullHandler(WorkQueueFullHandler workQueueFullHandler);
系统有一个默认的处理器 CacheAsynWorkHandler 建议实现自己的处理器,需实现 addAsynWork,process 方法 。process建议启动一个守护线程监听.
四.启动服务
public void init();
五.添加异步工作API
/** * 添加异步工作 * @param tagerObject -- 目标对象(可以是 Class,Object,String(spring)) * @param method -- 目标方法 */ public void addWork(Object tagerObject, String method); /** * 添加异步工作 * @param tagerObject -- 目标对象(可以是 Class,Object,String(spring)) * @param method -- 目标方法 * @param params -- 目标方法参数 */ public void addWork(Object tagerObject, String method,Object[] params); /** * 添加异步工作 * * * @param tagerObject -- 目标对象(可以是 Class,Object,String(spring)) * @param method -- 目标方法 * @param asynCallBack --回调对象 * @param params -- 目标方法参数 */ public void addWork(Object tagerObject, String method,Object[] params, AsynCallBack asynCallBack); /** * 添加异步工作 * * * @param tagerObject -- 目标对象(可以是 Class,Object,String(spring)) * @param method -- 目标方法 * @param asynCallBack --回调对象 * @param params -- 目标方法参数 * @param weight -- 工作权重 */ public void addWork(Object tagerObject, String method, Object[] params,AsynCallBack asynCallBack, WorkWeight weight); /** * 添加异步工作 * @param tagerObject -- 目标对象(可以是 Class,Object,String(spring)) * @param method -- 目标方法 * @param asynCallBack --回调对象 * @param params -- 目标方法参数 * @param weight -- 工作权重 * @param cache -- 如果目标对象为class,实例化后是否缓存 */ public void addWork(Object tagerObject, String method, Object[] params, AsynCallBack asynCallBack, WorkWeight weight, boolean cache); /** * Spring 添加异步工作 * * @param target -- 目标对象BeanName * @param method -- 目标方法 * @param asynCallBack --回调对象 * @param params -- 目标方法参数 * @param weight -- 工作权重 */ public void addWorkWithSpring( String target, String method,Object[] params, AsynCallBack asynCallBack, WorkWeight weight); /** * 添加异步工作 * * @param asynWork -- 异步工作实例 */ public void addAsynWork(AsynWork asynWork);
六.获取运行状态信息
/** * * 获取运行状态MAP * @return */ public Map<String,Integer> getRunStatMap(); Map key说明 total:累计接收异步工作数 execute:执行异步工作数 callback:执行回调数
/** * 获取运行状态字符信息 * @return */ public String getRunStatInfo();
七. 调用基于Spring Bean的异步方法
1.applicationContext.xml 加入
<bean id="springBeanUtil" class="com.googlecode.asyn4j.spring.AsynSpringUtil"> </bean>
使用下列方法添加异步工作
asynService.addWork("testBean", "myName",new Object[] { "asyn4j" + i });
八.创建基于Spring 的依赖Bean
asynService spring bean 工厂
<bean id="asynService" class="com.googlecode.asyn4j.spring.AsynServiceFactoryBean"> <!--设置自定义相关参数--> <property name="maxCacheWork" value="100"></property> <property name="addWorkWaitTime" value="2000"></property> <property name="workThreadNum" value="3"></property> <property name="callbackThreadNum" value="2"></property> <!--添加相关处理器--> <property name="errorAsynWorkHandler"> <bean class="com.googlecode.asyn4j.core.handler.DefaultErrorAsynWorkHandler"/> </property> <property name="workQueueFullHandler"> <bean class="com.googlecode.asyn4j.core.handler.CacheAsynWorkHandler"/> </property> </bean>
九.关闭服务
/** * 关闭服务等待 waitTime 秒 * @ wait time */ public void close(long waitTime); /** * 关闭服务等待1分钟 */ public void close();
十.注意
查找异步工作目标方法时,无法区分方法同名的并且参数是继承关系的方法.
源文地址:http://code.google.com/p/asyn4j/wiki/user_guide
发表评论
-
tomcat7下对HTTPS的部署配置
2018-11-09 15:33 6961、申请CA证书,可以在腾讯云或者阿里云申请到免费的CA ... -
IDEA切换 svn 问题
2017-11-27 09:21 4857今天项目,本来以为就几分钟的事没想到,还出现报错了,错误日记 ... -
log4j cfx 接口请求、返回信息 日志文件分离
2017-06-28 15:04 2025log4j.rootLogger=info,stdout, ... -
junit 启动报错:java.lang.NoClassDefFoundError
2013-04-17 19:31 1519junit 启动报错:java.lang.NoClassDe ... -
Java中抽象类和接口的区别
2013-04-16 12:12 949小结 1.abstract class 在 Java ... -
web.xml中servlet, bean, filter, listenr 加载顺序汇总
2013-03-28 16:17 1479web.xml中servlet, bean, filter, ... -
深入Java虚拟机JVM类加载初始化学习笔记
2013-03-26 20:39 11661. Classloader的作用,概括来说就是将编译后的c ... -
http代理出错Proxy Error
2013-03-22 09:15 1567最近项目突然访问几下次报: Proxy Error ... -
通过javamelody监控web应用的性能指标
2013-03-04 12:00 17011、问题背景 为了提升应用的性能我们可能需要做很多分析和 ... -
javamelody监控
2013-03-04 11:50 1433. 将 javamelody-1.42.0.war 文件部署 ... -
myeclipse安装svn插件的肯定可行的方法
2012-12-18 21:26 8851、下载最新的SVN包:http://subclipse.ti ... -
WordTemplate 使用
2012-03-27 11:28 1155http://wiki.softartisans.com/di ... -
asyn4j -- 异步方法调用框架
2012-03-14 14:15 01.3更新 优化代码 新增任务持久与恢复功能 ... -
JasperReport
2011-09-01 13:45 1197“在JRE 5以上的java环境中,java会自动加载$JAV ... -
解决Linux操作系统下AES解密失败的问题
2011-03-11 16:00 6879现象描述: windows上加解密正常,linu ... -
使用set+list进行过滤重复并排序
2011-02-28 11:30 1757有时要把有重复的数据用set去掉重复元素,但用set后又把元素 ... -
ssh 事务
2011-01-12 23:03 1102ssh在做事务提交时,不能直接用Sql语句进行insert i ... -
struts2与 json
2011-01-10 09:17 1161需要注意的是,如果用JSON插件把返回结果定为JSON。而JS ... -
struts2返回json数据问题
2011-01-06 20:58 1221最近同事反映struts2返回数据不了json数据,特意测试了 ... -
如何使用xFire开发webService返回复杂对象List
2011-01-04 09:53 1840调用 Web Services 时,经常需要返回集合( col ...
相关推荐
asyn4j是一个java异步方法调用框架,本人对源码做了一些修改,使其支持java 1.4或更高的版本。
自用备份
异步队列,实用,需要手动添加到maven仓库 @Override public void send(String beanId, Map,Serializable> map) { AsynService asynService = AsynServiceImpl.getService(); asynService.init(); asynService....
使用IAsyncResult 对象的异步操作与使用事件的异步操作
前端项目-syn,Standalone Synthetic Event Library
UVM验证环境源码在:..\asyn_fifo_project\asyn_fifo_uvm 文件夹下: 仿真环境为Questa Sim。 asyn_fifo_in_pkg.sv主要用来驱动和监测asyn_fifo的输入端口,包含以下组件: my_transaction类定义了在验证平台...
ASYN205B并车中央控制器说明书资料.pdf
UVM验证环境源码在:..\asyn_fifo_project\asyn_fifo_uvm 文件夹下: 仿真环境为Questa Sim。 asyn_fifo_in_pkg.sv主要用来驱动和监测asyn_fifo的输入端口,包含以下组件: my_transaction类定义了在验证平台...
此程序内部包含了异步发电机的各种仿真模型,希望对大家有用。
两传感器异步融合,由于采样率和传感器开机时间不同引起的异步问题。
Asyn-SimRank:一种异步执行的大规模SimRank算法
自定义异步FIFO设计,用于数字ic及fpga设计中的数据缓存
asyn_task 批量上传或下载异步处理任务的工具 运行命令pip install asyn_task
一步套接字模型,讲述了几种常用的套接字模型。想学网络编程的话,必看!
异步FIFO设计的说明文档,需要注意的问题以及源码(在文中有)。是标准的异步FIFO,可综合。
asyn和cawait与Task的区别(笔记) asyn和cawait与Task的区别(笔记) asyn和cawait与Task的区别(笔记)
我们经常会遇到这样的麻烦事,多个函数按顺序执行,返回结果却不是我们预期的顺序,原因一般是由于异步操作引起的,所以呢,我们需要一种解决方案来处理这种问题,从而使得异步操作按照同步的方式来执行,这样我们就可以...
高速无CMOS纯自旋电子异步递归神经网络_High-Speed CMOS-Free Purely Spintronic Asynchronous Recurrent Neural Network.pdf
verilog语言中易犯的错误,自己写的异步fifo的源代码,同步fifo的源代码。数字ic设计流程,低功耗技术,MOS管,FPGA中LUT的原理等等
routeros syn源的检查方法