摘要:项目简介是一款异步处理框架。设计目的并行执行可以大幅度提升程序的运行速度,有效利用资源。引入定义测试对象定义接口当前版本没有引入等字节码包,需要实现接口才能异步并行。
项目简介
Async 是一款 Java 异步处理框架。
设计目的并行执行可以大幅度提升程序的运行速度,有效利用 CPU 资源。
但是多带带为每次方法都使用线程池手写,显然不够优雅,复用性也很差。
特性支持接口类的动态代理异步
支持非接口类的 CGLIB 代理异步
快速入门具体测试代码,参见 async-test 模块。
引入 maven定义测试对象com.github.houbb async-core 0.0.2
定义接口
当前版本没有引入 CGLIB 等字节码包,需要实现接口才能异步并行。
如果不实现接口,则不实现异步并行。
下个版本会添加 CGLIB,则不用实现接口。
import com.github.houbb.async.core.model.async.AsyncResult; /** * 用户服务接口 * @author binbin.hou * date 2019/3/7 * @since 0.0.1 */ public interface UserService { /** * 查询用户信息 * @param id 主键 * @return 结果 */ AsyncResultqueryUser(final String id); }
定义测试实现类
public class UserServiceImpl implements UserService { @Override public AsyncResult测试 不使用代理queryUser(String id) { System.out.println("开始根据用户id 查询用户信息 " + id); try { // 沉睡模拟处理耗时 TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } final String result = id + "-result"; System.out.println("结束根据用户id 查询用户信息 " + result); AsyncResult asyncResult = new AsyncResult<>(); asyncResult.setValue(result); return asyncResult; } }
常规使用方式
/** * 默认不使用代理 */ @Test public void queryUserTest() { long start = System.currentTimeMillis(); UserService userService = new UserServiceImpl(); AsyncResultresult = userService.queryUser("123"); AsyncResult result2 = userService.queryUser("1234"); System.out.println("查询结果" + result.getResult()); System.out.println("查询结果" + result2.getResult()); long end = System.currentTimeMillis(); System.out.println("共计耗时: " + (end-start)); }
日志信息
开始根据用户id 查询用户信息 123 结束根据用户id 查询用户信息 123-result 开始根据用户id 查询用户信息 1234 结束根据用户id 查询用户信息 1234-result 查询结果123-result 查询结果1234-result 共计耗时: 6009使用代理
/** * 使用动态代理 */ @Test public void queryUserDynamicProxyTest() { long start = System.currentTimeMillis(); UserService userService = new UserServiceImpl(); UserService userServiceProxy = (UserService) AsyncProxy.getProxy(userService); AsyncResultresult = userServiceProxy.queryUser("123"); AsyncResult result2 = userServiceProxy.queryUser("1234"); System.out.println("查询结果" + result.getResult()); System.out.println("查询结果" + result2.getResult()); long end = 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
后期特性可结合 spring aop 使用的注解
返回值不再要求返回 AsyncResult,减少对代码的侵入性
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73684.html
摘要:对于任务的分割,要求各个子任务之间相互独立,能够并行独立地执行任务,互相之间不影响。是叉子分叉的意思,即将大任务分解成并行的小任务,是连接结合的意思,即将所有并行的小任务的执行结果汇总起来。使用方法会阻塞并等待子任务执行完并得到其结果。 Fork/Join是什么? Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小...
摘要:后端好书阅读与推荐系列文章后端好书阅读与推荐后端好书阅读与推荐续后端好书阅读与推荐续二后端好书阅读与推荐续三这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。然后又请求封锁,当释放了上的封锁之后,系统又批准了的请求一直等待。 后端好书阅读与推荐系列文章:后端好书阅读与推荐后端好书阅读与推荐(续)后端好书阅读与推荐(续二)后端好书阅读与推荐(续三) 这里依然记录一下每本书的...
摘要:后端好书阅读与推荐系列文章后端好书阅读与推荐后端好书阅读与推荐续后端好书阅读与推荐续二后端好书阅读与推荐续三这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。然后又请求封锁,当释放了上的封锁之后,系统又批准了的请求一直等待。 后端好书阅读与推荐系列文章:后端好书阅读与推荐后端好书阅读与推荐(续)后端好书阅读与推荐(续二)后端好书阅读与推荐(续三) 这里依然记录一下每本书的...
摘要:后端好书阅读与推荐系列文章后端好书阅读与推荐后端好书阅读与推荐续后端好书阅读与推荐续二后端好书阅读与推荐续三这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。然后又请求封锁,当释放了上的封锁之后,系统又批准了的请求一直等待。 后端好书阅读与推荐系列文章:后端好书阅读与推荐后端好书阅读与推荐(续)后端好书阅读与推荐(续二)后端好书阅读与推荐(续三) 这里依然记录一下每本书的...
摘要:探究系统登录验证码的实现后端掘金验证码生成类手把手教程后端博客系统第一章掘金转眼间时间就从月份到现在的十一月份了。提供了与标准不同的工作方式我的后端书架后端掘金我的后端书架月前本书架主要针对后端开发与架构。 Spring Boot干货系列总纲 | 掘金技术征文 - 掘金原本地址:Spring Boot干货系列总纲博客地址:http://tengj.top/ 前言 博主16年认识Spin...
阅读 780·2021-11-09 09:47
阅读 1566·2019-08-30 15:44
阅读 1141·2019-08-26 13:46
阅读 2105·2019-08-26 13:41
阅读 1265·2019-08-26 13:32
阅读 3770·2019-08-26 10:35
阅读 3517·2019-08-23 17:16
阅读 447·2019-08-23 17:07