锁定老帖子 主题:asyn4j -- 异步方法调用框架
精华帖 (2) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-24
最后修改:2010-08-24
让我们写异步方法不再写很多的相关多线程代码。用asyn4j轻松搞定异步方法调用.提高程序的响应能力. 设计图 1.调用普通方法 主方法 public static void main(String[] args) { // 初始化异步工作服务 AsynService asynService = AsynServiceImpl.getService(300, 3000L, 3, 2); // 启动服务 asynService.init(); // 异步回调对象 AsynCallBack back = new TargetBack(); for (int i = 0; i < 1000; i++) { // 添加加异步工作- TargetService 的 test 方法 ,方法参数 asynej+ i asynService.addWork(new Object[] { "asyn4j" + i }, TargetService.class, "test", new TargetBack()); //实例化目标对象再调用 // TargetService targetService = new TargetService (); //asynService.addWork(new Object[] { "asyn4j" + i }, // targetService , "test", new TargetBack()); } } 异步调用对象 public class TargetService { public String test(String name){ System.out.println(name +" test is execute!"); return name; } } 回调方法 //回调需继承AsynCallBack抽象类 public class TargetBack extends AsynCallBack { @Override public void doNotify() { //输出异步方法调用返回结果 System.out.println(this.methodResult); } } 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"> </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.addWorkWithSpring(new Object[] { "panxiuyan" + i }, "testBean", "myName"); } } } 3.使用异步工作缓冲器 AsynService anycService = AsynServiceImpl.getService(300, 3000L, 100, 100); anycService.setWorkQueueFullHandler(new CacheAsynWorkHandler(100)); anycService.init(); 当工作队列中的工作超过300个时,异步工作将由CacheAsynWorkHandler?处理; 4.异步工作优级 默认优先级为5 ,相关API //目标对象为指定实例 public void addWork(Object[] params, Object tagerObject, String method,AsynCallBack asynCallBack, int weight); //目标对象为class public void addWork(Object[] params,Class clzss,String method,AsynCallBack asynCallBack,int weight); //Spring对应 public void addWorkWithSpring(Object[] params,String target,String method,AsynCallBack asynCallBack,int weight); 看到这里感兴趣了吗?想了解更多查看如下资料或站内信联络. 项目地址:http://asyn4j.googlecode.com 源码SVN : http://asyn4j.googlecode.com/svn/branches/asyn4j WIKI: http://code.google.com/p/asyn4j/wiki/user_guide 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-25
没有人感兴趣吗?
|
|
返回顶楼 | |
发表时间:2010-08-25
能简单的介绍为啥要用你这个么?
你对runnable callable有任何优化么? 你的架构有没有基于什么理论? |
|
返回顶楼 | |
发表时间:2010-08-25
beneo 写道 能简单的介绍为啥要用你这个么? 你对runnable callable有任何优化么? 你的架构有没有基于什么理论? 在写异步方法经常要写一些相关的多线程代码,使用框架后可以不用关心多线程代码。同时如果项目中很多地方要使用的异步的话,多线程代码分散不便于测试和维护. runnable callable 优化不知道你指那方面的优化,在框架中异步工作和回调都是并发进行的.并发量需根据你系统和业务具体的进行设置。 架构很简单,就是生产者与消费者的模式.在高并发的情况可以自己设定异步工作缓冲器,缓存起来等系统闲下来再执行。异步工作可设置优化级.提供监控状态信息. |
|
返回顶楼 | |
发表时间:2010-08-25
我只能说胡扯蛋
|
|
返回顶楼 | |
发表时间:2010-08-25
最后修改:2010-08-25
askyuan 写道 我只能说胡扯蛋
谢谢你的批评,请说出你的道理我洗耳恭听.这样有利于我们的成长. 我以前项目开发就遇到很多这样的问题,写一具异步方法。要写很多代码. 一直都想有类似一个异步方法调用封装的框架. |
|
返回顶楼 | |
发表时间:2010-08-25
为啥不看看java jdk里的Executor框架呢?
|
|
返回顶楼 | |
发表时间:2010-08-25
duooluu 写道 为啥不看看java jdk里的Executor框架呢?
这个框架就是用Executor实行的线程池功能. |
|
返回顶楼 | |
发表时间:2010-08-25
pan_java 写道 duooluu 写道 为啥不看看java jdk里的Executor框架呢?
这个框架就是用Executor实行的线程池功能. 看到Executor框架中的线程池ThreadPoolExecutor了吗? |
|
返回顶楼 | |
发表时间:2010-08-25
我目前也在寻找这样的框架技术
Spring3已经有个一个Future的异步执行。 自己用线程写也是可以实现的。 我的问题是,如何保证异步调用的容错性? :调用的程序运行一半,系统死掉了,而该异步调用又是必须完成的业务? |
|
返回顶楼 | |