让我们写异步方法不再写很多的相关多线程代码。用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 加入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