基于注解的 java 异步处理框架。



并行执行可以大幅度提升程序的运行速度,有效利用 CPU 资源。
但是单独为每次方法都使用线程池手写,显然不够优雅,复用性也很差。
支持接口类的动态代理异步
支持非接口类的 CGLIB 代理异步
具体测试代码,参见 async-test 模块。
<dependency> <groupId>com.github.houbb</groupId> <artifactId>async-core</artifactId> <version>0.0.3</version></dependency>
当前版本没有引入 CGLIB 等字节码包,需要实现接口才能异步并行。
如果不实现接口,则不实现异步并行。
下个版本会添加 CGLIB,则不用实现接口。
importcom.github.houbb.async.core.model.async.AsyncResult;/** * 用户服务接口 * @author binbin.hou * date 2019/3/7 * @since 0.0.1 */publicinterfaceUserService {/** * 查询用户信息 * @param id 主键 * @return 结果 */AsyncResult<String>queryUser(finalStringid);}
publicclassUserServiceImplimplementsUserService {@OverridepublicAsyncResult<String>queryUser(Stringid) {System.out.println("开始根据用户id 查询用户信息 " +id);try {// 沉睡模拟处理耗时TimeUnit.SECONDS.sleep(3); }catch (InterruptedExceptione) {e.printStackTrace(); }finalStringresult =id +"-result";System.out.println("结束根据用户id 查询用户信息 " +result);AsyncResult<String>asyncResult =newAsyncResult<>();asyncResult.setValue(result);returnasyncResult; }}
常规使用方式
/** * 默认不使用代理 */@TestpublicvoidqueryUserTest() {longstart =System.currentTimeMillis();UserServiceuserService =newUserServiceImpl();AsyncResult<String>result =userService.queryUser("123");AsyncResult<String>result2 =userService.queryUser("1234");System.out.println("查询结果" +result.getResult());System.out.println("查询结果" +result2.getResult());longend =System.currentTimeMillis();System.out.println("共计耗时: " + (end-start));}
开始根据用户id 查询用户信息 123结束根据用户id 查询用户信息 123-result开始根据用户id 查询用户信息 1234结束根据用户id 查询用户信息 1234-result查询结果123-result查询结果1234-result共计耗时: 6009
/** * 使用动态代理 */@TestpublicvoidqueryUserDynamicProxyTest() {longstart =System.currentTimeMillis();UserServiceuserService =newUserServiceImpl();UserServiceuserServiceProxy = (UserService)AsyncProxy.getProxy(userService);AsyncResult<String>result =userServiceProxy.queryUser("123");AsyncResult<String>result2 =userServiceProxy.queryUser("1234");System.out.println("查询结果" +result.getResult());System.out.println("查询结果" +result2.getResult());longend =System.currentTimeMillis();System.out.println("共计耗时: " + (end-start));}
开始根据用户id 查询用户信息 123开始根据用户id 查询用户信息 1234结束根据用户id 查询用户信息 123-result结束根据用户id 查询用户信息 1234-result查询结果123-result查询结果1234-result共计耗时: 3009
同样的功能实现,节约了将近一半的时间。
Async-01-项目模块说明
Async-02-CGLIB代理.md
Async-03-Spring-整合.md
heaven: 收集开发中常用的工具类
rpc: 基于 netty4 实现的远程调用工具
mq: 简易版 mq 实现
ioc: 模拟简易版 spring ioc
mybatis: 简易版 mybatis
cache: 渐进式 redis 缓存
jdbc-pool: 数据库连接池实现
sandglass: 任务调度时间工具框架
sisyphus: 支持注解的重试框架
resubmit: 防止重复提交框架,支持注解
auto-log: 日志自动输出
async: 多线程异步并行框架