Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🦄The async tool for java.(Java 多线程异步并行框架,基于 java 字节码,支持注解。)

NotificationsYou must be signed in to change notification settings

houbb/async

Repository files navigation

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

Maven CentralBuild StatusCoverage Status

设计目的

并行执行可以大幅度提升程序的运行速度,有效利用 CPU 资源。

但是单独为每次方法都使用线程池手写,显然不够优雅,复用性也很差。

特性

  • 支持接口类的动态代理异步

  • 支持非接口类的 CGLIB 代理异步

快速入门

具体测试代码,参见 async-test 模块。

需要

  • jdk1.7+

  • maven 3.x+

引入 maven

<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

后期 Road-MAP

  • 开启可以指定为 sync 或者 async 的方式执行。

  • 对于返回值的优化,返回值可以是任何类型。

  • 添加 spring-boot-starter 特性

中间件等工具开源矩阵

heaven: 收集开发中常用的工具类

rpc: 基于 netty4 实现的远程调用工具

mq: 简易版 mq 实现

ioc: 模拟简易版 spring ioc

mybatis: 简易版 mybatis

cache: 渐进式 redis 缓存

jdbc-pool: 数据库连接池实现

sandglass: 任务调度时间工具框架

sisyphus: 支持注解的重试框架

resubmit: 防止重复提交框架,支持注解

auto-log: 日志自动输出

async: 多线程异步并行框架

About

🦄The async tool for java.(Java 多线程异步并行框架,基于 java 字节码,支持注解。)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp