版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houkai18792669930/article/details/85294598
介绍
asyn4j 是google的一个Java异步方法调用框架,基于消费者与生产者模式。包括了异步方法执行,异步回调执行,异步工作缓存模块.支持Spring. 使用此框架可以让开发人员不再写很多的相关多线程代码。
使用
类 demo
package com;
import com.googlecode.asyn4j.core.callback.AsynCallBack;
import com.googlecode.asyn4j.core.handler.CacheAsynWorkHandler;
import com.googlecode.asyn4j.service.AsynService;
import com.googlecode.asyn4j.service.AsynServiceImpl;
/**
* 普通调用
*/
public class Demo {
public static void main(String[] args) {
// 初始化异步工作服务
/*
(maxCacheWork)最大工作队列缓存工作数 – 300(默认值)
(addWorkWaitTime)当工作队列满时添加工作等待时间-- Long.MAX_VALUE(默认值)
(workThreadNum)异步工作执行线程池大小 ---- CPU核数/2 +1(默认值)
(callBackThreadNum)回调执行线程池大小 --- CPU核数/2(默认值)
(closeServiceWaitTime) 服务关闭等待时间 ---- 60000s(默认值)*/
//(int maxCacheWork, long addWorkWaitTime, int workThreadNum,int callBackThreadNum, long closeServiceWaitTime)
AsynService asynService = AsynServiceImpl.getService(3000, 3000L,10, 150,6000L);
//设置队列大小
asynService.setWorkQueueFullHandler(new CacheAsynWorkHandler(500));
// 启动服务
asynService.init();
// 异步回调对象
AsynCallBack back = new TargetBack();
for (int i = 0; i < 100; 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());
}
}
}
异步调用的类
package com;
/**
* 异步调用对象
*/
public class TargetService {
public User test(String name){
//System.out.println(name +" test is execute!");
User u = new User();
u.setName("张三");
return u;
}
}
class User{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
异步回调的类 TargetBack
package com;
import com.googlecode.asyn4j.core.callback.AsynCallBack;
/**
* 回调方法
*/
public class TargetBack extends AsynCallBack {
@Override
public void doNotify() {
//输出异步方法调用返回结果
//System.out.println();
User u = (User) this.methodResult;
System.out.printf(u.getName());
}
}
以上代码就是Asyn4j的基本使用,如果需要将此框架和Spring整合使用只需要将按照以下代码进行注入即可:
<bean id="asynService" class="com.googlecode.asyn4j.spring.AsynServiceFactoryBean"/>