摘要:項(xiàng)目簡(jiǎn)介是一款異步處理框架。設(shè)計(jì)目的并行執(zhí)行可以大幅度提升程序的運(yùn)行速度,有效利用資源。引入定義測(cè)試對(duì)象定義接口當(dāng)前版本沒(méi)有引入等字節(jié)碼包,需要實(shí)現(xiàn)接口才能異步并行。
項(xiàng)目簡(jiǎn)介
Async 是一款 Java 異步處理框架。
設(shè)計(jì)目的并行執(zhí)行可以大幅度提升程序的運(yùn)行速度,有效利用 CPU 資源。
但是多帶帶為每次方法都使用線(xiàn)程池手寫(xiě),顯然不夠優(yōu)雅,復(fù)用性也很差。
特性支持接口類(lèi)的動(dòng)態(tài)代理異步
支持非接口類(lèi)的 CGLIB 代理異步
快速入門(mén)具體測(cè)試代碼,參見(jiàn) async-test 模塊。
引入 maven定義測(cè)試對(duì)象com.github.houbb async-core 0.0.2
定義接口
當(dāng)前版本沒(méi)有引入 CGLIB 等字節(jié)碼包,需要實(shí)現(xiàn)接口才能異步并行。
如果不實(shí)現(xiàn)接口,則不實(shí)現(xiàn)異步并行。
下個(gè)版本會(huì)添加 CGLIB,則不用實(shí)現(xiàn)接口。
import com.github.houbb.async.core.model.async.AsyncResult; /** * 用戶(hù)服務(wù)接口 * @author binbin.hou * date 2019/3/7 * @since 0.0.1 */ public interface UserService { /** * 查詢(xún)用戶(hù)信息 * @param id 主鍵 * @return 結(jié)果 */ AsyncResultqueryUser(final String id); }
定義測(cè)試實(shí)現(xiàn)類(lèi)
public class UserServiceImpl implements UserService { @Override public AsyncResult測(cè)試 不使用代理queryUser(String id) { System.out.println("開(kāi)始根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 " + id); try { // 沉睡模擬處理耗時(shí) TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } final String result = id + "-result"; System.out.println("結(jié)束根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 " + result); AsyncResult asyncResult = new AsyncResult<>(); asyncResult.setValue(result); return asyncResult; } }
常規(guī)使用方式
/** * 默認(rèn)不使用代理 */ @Test public void queryUserTest() { long start = System.currentTimeMillis(); UserService userService = new UserServiceImpl(); AsyncResultresult = userService.queryUser("123"); AsyncResult result2 = userService.queryUser("1234"); System.out.println("查詢(xún)結(jié)果" + result.getResult()); System.out.println("查詢(xún)結(jié)果" + result2.getResult()); long end = System.currentTimeMillis(); System.out.println("共計(jì)耗時(shí): " + (end-start)); }
日志信息
開(kāi)始根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 123 結(jié)束根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 123-result 開(kāi)始根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 1234 結(jié)束根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 1234-result 查詢(xún)結(jié)果123-result 查詢(xún)結(jié)果1234-result 共計(jì)耗時(shí): 6009使用代理
/** * 使用動(dòng)態(tài)代理 */ @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("查詢(xún)結(jié)果" + result.getResult()); System.out.println("查詢(xún)結(jié)果" + result2.getResult()); long end = System.currentTimeMillis(); System.out.println("共計(jì)耗時(shí): " + (end-start)); }
日志信息
開(kāi)始根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 123 開(kāi)始根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 1234 結(jié)束根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 123-result 結(jié)束根據(jù)用戶(hù)id 查詢(xún)用戶(hù)信息 1234-result 查詢(xún)結(jié)果123-result 查詢(xún)結(jié)果1234-result 共計(jì)耗時(shí): 3009
同樣的功能實(shí)現(xiàn),節(jié)約了將近一半的時(shí)間。
拓展閱讀Async-01-項(xiàng)目模塊說(shuō)明
Async-02-CGLIB代理.md
后期特性可結(jié)合 spring aop 使用的注解
返回值不再要求返回 AsyncResult,減少對(duì)代碼的侵入性
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73684.html
摘要:對(duì)于任務(wù)的分割,要求各個(gè)子任務(wù)之間相互獨(dú)立,能夠并行獨(dú)立地執(zhí)行任務(wù),互相之間不影響。是叉子分叉的意思,即將大任務(wù)分解成并行的小任務(wù),是連接結(jié)合的意思,即將所有并行的小任務(wù)的執(zhí)行結(jié)果匯總起來(lái)。使用方法會(huì)阻塞并等待子任務(wù)執(zhí)行完并得到其結(jié)果。 Fork/Join是什么? Fork/Join框架是Java7提供的并行執(zhí)行任務(wù)框架,思想是將大任務(wù)分解成小任務(wù),然后小任務(wù)又可以繼續(xù)分解,然后每個(gè)小...
摘要:后端好書(shū)閱讀與推薦系列文章后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦續(xù)后端好書(shū)閱讀與推薦續(xù)二后端好書(shū)閱讀與推薦續(xù)三這里依然記錄一下每本書(shū)的亮點(diǎn)與自己讀書(shū)心得和體會(huì),分享并求拍磚。然后又請(qǐng)求封鎖,當(dāng)釋放了上的封鎖之后,系統(tǒng)又批準(zhǔn)了的請(qǐng)求一直等待。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二)后端好書(shū)閱讀與推薦(續(xù)三) 這里依然記錄一下每本書(shū)的...
摘要:后端好書(shū)閱讀與推薦系列文章后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦續(xù)后端好書(shū)閱讀與推薦續(xù)二后端好書(shū)閱讀與推薦續(xù)三這里依然記錄一下每本書(shū)的亮點(diǎn)與自己讀書(shū)心得和體會(huì),分享并求拍磚。然后又請(qǐng)求封鎖,當(dāng)釋放了上的封鎖之后,系統(tǒng)又批準(zhǔn)了的請(qǐng)求一直等待。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二)后端好書(shū)閱讀與推薦(續(xù)三) 這里依然記錄一下每本書(shū)的...
摘要:后端好書(shū)閱讀與推薦系列文章后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦續(xù)后端好書(shū)閱讀與推薦續(xù)二后端好書(shū)閱讀與推薦續(xù)三這里依然記錄一下每本書(shū)的亮點(diǎn)與自己讀書(shū)心得和體會(huì),分享并求拍磚。然后又請(qǐng)求封鎖,當(dāng)釋放了上的封鎖之后,系統(tǒng)又批準(zhǔn)了的請(qǐng)求一直等待。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二)后端好書(shū)閱讀與推薦(續(xù)三) 這里依然記錄一下每本書(shū)的...
摘要:探究系統(tǒng)登錄驗(yàn)證碼的實(shí)現(xiàn)后端掘金驗(yàn)證碼生成類(lèi)手把手教程后端博客系統(tǒng)第一章掘金轉(zhuǎn)眼間時(shí)間就從月份到現(xiàn)在的十一月份了。提供了與標(biāo)準(zhǔn)不同的工作方式我的后端書(shū)架后端掘金我的后端書(shū)架月前本書(shū)架主要針對(duì)后端開(kāi)發(fā)與架構(gòu)。 Spring Boot干貨系列總綱 | 掘金技術(shù)征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認(rèn)識(shí)Spin...
閱讀 847·2021-11-09 09:47
閱讀 1654·2019-08-30 15:44
閱讀 1195·2019-08-26 13:46
閱讀 2178·2019-08-26 13:41
閱讀 1367·2019-08-26 13:32
閱讀 3847·2019-08-26 10:35
閱讀 3597·2019-08-23 17:16
閱讀 517·2019-08-23 17:07