真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java異步并行框架async-01-入門教程

項(xiàng)目簡(jiǎn)介

Async 是一款 Java 異步處理框架。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的石龍網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

設(shè)計(jì)目的

并行執(zhí)行可以大幅度提升程序的運(yùn)行速度,有效利用 CPU 資源。

但是單獨(dú)為每次方法都使用線程池手寫,顯然不夠優(yōu)雅,復(fù)用性也很差。

特性

  • 支持接口類的動(dòng)態(tài)代理異步

  • 支持非接口類的 CGLIB 代理異步

快速入門

具體測(cè)試代碼,參見 async-test 模塊。

引入 maven


    com.github.houbb
    async-core
    0.0.2

定義測(cè)試對(duì)象

  • 定義接口

當(dāng)前版本沒有引入 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;

/**
 * 用戶服務(wù)接口
 * @author binbin.hou
 * date 2019/3/7
 * @since 0.0.1
 */
public interface UserService {

    /**
     * 查詢用戶信息
     * @param id 主鍵
     * @return 結(jié)果
     */
    AsyncResult queryUser(final String id);

}
  • 定義測(cè)試實(shí)現(xiàn)類
public class UserServiceImpl implements UserService {

    @Override
    public AsyncResult queryUser(String id) {
        System.out.println("開始根據(jù)用戶id 查詢用戶信息 " + id);
        try {
            // 沉睡模擬處理耗時(shí)
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        final String result = id + "-result";
        System.out.println("結(jié)束根據(jù)用戶id 查詢用戶信息 " + result);

        AsyncResult asyncResult = new AsyncResult<>();
        asyncResult.setValue(result);
        return asyncResult;
    }

}

測(cè)試

不使用代理

常規(guī)使用方式

/**
 * 默認(rèn)不使用代理
 */
@Test
public void queryUserTest() {
    long start = System.currentTimeMillis();
    UserService userService = new UserServiceImpl();
    AsyncResult result = userService.queryUser("123");
    AsyncResult result2 = userService.queryUser("1234");

    System.out.println("查詢結(jié)果" + result.getResult());
    System.out.println("查詢結(jié)果" + result2.getResult());
    long end = System.currentTimeMillis();
    System.out.println("共計(jì)耗時(shí): " + (end-start));
}
  • 日志信息
開始根據(jù)用戶id 查詢用戶信息 123
結(jié)束根據(jù)用戶id 查詢用戶信息 123-result
開始根據(jù)用戶id 查詢用戶信息 1234
結(jié)束根據(jù)用戶id 查詢用戶信息 1234-result
查詢結(jié)果123-result
查詢結(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);
    AsyncResult result = userServiceProxy.queryUser("123");
    AsyncResult result2 = userServiceProxy.queryUser("1234");

    System.out.println("查詢結(jié)果" + result.getResult());
    System.out.println("查詢結(jié)果" + result2.getResult());
    long end = System.currentTimeMillis();
    System.out.println("共計(jì)耗時(shí): " + (end-start));
}
  • 日志信息
開始根據(jù)用戶id 查詢用戶信息 123
開始根據(jù)用戶id 查詢用戶信息 1234
結(jié)束根據(jù)用戶id 查詢用戶信息 123-result
結(jié)束根據(jù)用戶id 查詢用戶信息 1234-result
查詢結(jié)果123-result
查詢結(jié)果1234-result
共計(jì)耗時(shí): 3009

同樣的功能實(shí)現(xiàn),節(jié)約了將近一半的時(shí)間。

拓展閱讀

Async-01-項(xiàng)目模塊說明

Async-02-CGLIB代理.md

后期特性

  • 可結(jié)合 spring aop 使用的注解

  • 返回值不再要求返回 AsyncResult,減少對(duì)代碼的侵入性

當(dāng)前題目:java異步并行框架async-01-入門教程
當(dāng)前路徑:http://weahome.cn/article/psdcdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部