摘要:項目簡介是一款異步處理框架。設計目的并行執行可以大幅度提升程序的運行速度,有效利用資源。引入定義測試對象定義接口當前版本沒有引入等字節碼包,需要實現接口才能異步并行。
項目簡介
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,減少對代碼的侵入性
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73684.html
摘要:對于任務的分割,要求各個子任務之間相互獨立,能夠并行獨立地執行任務,互相之間不影響。是叉子分叉的意思,即將大任務分解成并行的小任務,是連接結合的意思,即將所有并行的小任務的執行結果匯總起來。使用方法會阻塞并等待子任務執行完并得到其結果。 Fork/Join是什么? Fork/Join框架是Java7提供的并行執行任務框架,思想是將大任務分解成小任務,然后小任務又可以繼續分解,然后每個小...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續后端好書閱讀與推薦續二后端好書閱讀與推薦續三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續)后端好書閱讀與推薦(續二)后端好書閱讀與推薦(續三) 這里依然記錄一下每本書的...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續后端好書閱讀與推薦續二后端好書閱讀與推薦續三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續)后端好書閱讀與推薦(續二)后端好書閱讀與推薦(續三) 這里依然記錄一下每本書的...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續后端好書閱讀與推薦續二后端好書閱讀與推薦續三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續)后端好書閱讀與推薦(續二)后端好書閱讀與推薦(續三) 這里依然記錄一下每本書的...
摘要:探究系統登錄驗證碼的實現后端掘金驗證碼生成類手把手教程后端博客系統第一章掘金轉眼間時間就從月份到現在的十一月份了。提供了與標準不同的工作方式我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發與架構。 Spring Boot干貨系列總綱 | 掘金技術征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認識Spin...
閱讀 781·2021-11-09 09:47
閱讀 1568·2019-08-30 15:44
閱讀 1143·2019-08-26 13:46
閱讀 2107·2019-08-26 13:41
閱讀 1266·2019-08-26 13:32
閱讀 3772·2019-08-26 10:35
閱讀 3519·2019-08-23 17:16
閱讀 448·2019-08-23 17:07