日韩少妇无删减的电影在线视频观看-久久久伊人中文字幕-91成人在线视频观看-欧美日韩一区二区三区四区五区-激情五月天网站视频-欧美另类丰满熟妇xx-999re这里只有国产精品-国产蜜臀福利久久久av-人妻中文字幕av精,国产成人精品在线观看视频,69精品人妻久久久久久久,欧美日韩日欧美日韩中

[線程池]Springboot如何使用線程池

來源:騰訊云

本文帶你快速了解@Async注解的用法,包括異步方法無返回值、有返回值,最后總結(jié)了@Async注解失效的幾個坑。

在 SpringBoot 應(yīng)用中,經(jīng)常會遇到在一個接口中,同時做事情1,事情2,事情3,如果同步執(zhí)行的話,則本次接口時間取決于事情1 2 3執(zhí)行時間之和;如果三件事同時執(zhí)行,則本次接口時間取決于事情1 2 3執(zhí)行時間最長的那個,合理使用多線程,可以大大縮短接口時間。那么在 SpringBoot 應(yīng)用中如何優(yōu)雅的使用多線程呢?

Don"t bb, show me code.


(相關(guān)資料圖)

快速使用

SpringBoot應(yīng)用中需要添加@EnableAsync注解,來開啟異步調(diào)用,一般還會配置一個線程池,異步的方法交給特定的線程池完成,如下:

@Configuration@EnableAsyncpublic class AsyncConfiguration {    @Bean("doSomethingExecutor")    public Executor doSomethingExecutor() {        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        // 核心線程數(shù):線程池創(chuàng)建時候初始化的線程數(shù)        executor.setCorePoolSize(10);        // 最大線程數(shù):線程池最大的線程數(shù),只有在緩沖隊列滿了之后才會申請超過核心線程數(shù)的線程        executor.setMaxPoolSize(20);        // 緩沖隊列:用來緩沖執(zhí)行任務(wù)的隊列        executor.setQueueCapacity(500);        // 允許線程的空閑時間60秒:當超過了核心線程之外的線程在空閑時間到達之后會被銷毀        executor.setKeepAliveSeconds(60);        // 線程池名的前綴:設(shè)置好了之后可以方便我們定位處理任務(wù)所在的線程池        executor.setThreadNamePrefix("do-something-");        // 緩沖隊列滿了之后的拒絕策略:由調(diào)用線程處理(一般是主線程)        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());        executor.initialize();        return executor;    }}

使用的方式非常簡單,在需要異步的方法上加@Async注解

@RestControllerpublic class AsyncController {    @Autowired    private AsyncService asyncService;    @GetMapping("/open/something")    public String something() {        int count = 10;        for (int i = 0; i < count; i++) {            asyncService.doSomething("index = " + i);        }        lon        return "success";    }}@Slf4j@Servicepublic class AsyncService {    // 指定使用beanname為doSomethingExecutor的線程池    @Async("doSomethingExecutor")    public String doSomething(String message) {        log.info("do something, message={}", message);        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            log.error("do something error: ", e);        }        return message;    }}

訪問:127.0.0.1:8080/open/something,日志如下

2020-04-19 23:42:42.486  INFO 21168 --- [io-8200-exec-17] x.g.b.system.controller.AsyncController  : do something end, time 8 milliseconds2020-04-19 23:42:42.488  INFO 21168 --- [ do-something-1] x.gits.boot.system.service.AsyncService  : do something, message=index = 02020-04-19 23:42:42.488  INFO 21168 --- [ do-something-5] x.gits.boot.system.service.AsyncService  : do something, message=index = 42020-04-19 23:42:42.488  INFO 21168 --- [ do-something-4] x.gits.boot.system.service.AsyncService  : do something, message=index = 32020-04-19 23:42:42.488  INFO 21168 --- [ do-something-6] x.gits.boot.system.service.AsyncService  : do something, message=index = 52020-04-19 23:42:42.488  INFO 21168 --- [ do-something-9] x.gits.boot.system.service.AsyncService  : do something, message=index = 82020-04-19 23:42:42.488  INFO 21168 --- [ do-something-8] x.gits.boot.system.service.AsyncService  : do something, message=index = 72020-04-19 23:42:42.488  INFO 21168 --- [do-something-10] x.gits.boot.system.service.AsyncService  : do something, message=index = 92020-04-19 23:42:42.488  INFO 21168 --- [ do-something-7] x.gits.boot.system.service.AsyncService  : do something, message=index = 62020-04-19 23:42:42.488  INFO 21168 --- [ do-something-2] x.gits.boot.system.service.AsyncService  : do something, message=index = 12020-04-19 23:42:42.488  INFO 21168 --- [ do-something-3] x.gits.boot.system.service.AsyncService  : do something, message=index = 2

由此可見已經(jīng)達到異步執(zhí)行的效果了,并且使用到了咱們配置的線程池。

獲取異步方法返回值

當異步方法有返回值時,如何獲取異步方法執(zhí)行的返回結(jié)果呢?這時需要異步調(diào)用的方法帶有返回值CompletableFuture。

CompletableFuture是對Feature的增強,F(xiàn)eature只能處理簡單的異步任務(wù),而CompletableFuture可以將多個異步任務(wù)進行復雜的組合。如下:

@RestControllerpublic class AsyncController {    @Autowired    private AsyncService asyncService;    @SneakyThrows    @ApiOperation("異步 有返回值")    @GetMapping("/open/somethings")    public String somethings() {        CompletableFuture createOrder = asyncService.doSomething1("create order");        CompletableFuture reduceAccount = asyncService.doSomething2("reduce account");        CompletableFuture saveLog = asyncService.doSomething3("save log");        // 等待所有任務(wù)都執(zhí)行完        CompletableFuture.allOf(createOrder, reduceAccount, saveLog).join();        // 獲取每個任務(wù)的返回結(jié)果        String result = createOrder.get() + reduceAccount.get() + saveLog.get();        return result;    }}@Slf4j@Servicepublic class AsyncService {    @Async("doSomethingExecutor")    public CompletableFuture doSomething1(String message) throws InterruptedException {        log.info("do something1: {}", message);        Thread.sleep(1000);        return CompletableFuture.completedFuture("do something1: " + message);    }    @Async("doSomethingExecutor")    public CompletableFuture doSomething2(String message) throws InterruptedException {        log.info("do something2: {}", message);        Thread.sleep(1000);        return CompletableFuture.completedFuture("; do something2: " + message);    }    @Async("doSomethingExecutor")    public CompletableFuture doSomething3(String message) throws InterruptedException {        log.info("do something3: {}", message);        Thread.sleep(1000);        return CompletableFuture.completedFuture("; do something3: " + message);    }}

訪問接口

C:\Users\Administrator>curl -X GET "http://localhost:8200/open/somethings" -H "accept: */*"do something1: create order; do something2: reduce account; do something3: save log

控制臺上關(guān)鍵日志如下:

2020-04-20 00:27:42.238  INFO 5672 --- [ do-something-3] x.gits.boot.system.service.AsyncService  : do something3: save log2020-04-20 00:27:42.238  INFO 5672 --- [ do-something-2] x.gits.boot.system.service.AsyncService  : do something2: reduce account2020-04-20 00:27:42.238  INFO 5672 --- [ do-something-1] x.gits.boot.system.service.AsyncService  : do something1: create order

注意事項

@Async注解會在以下幾個場景失效,也就是說明明使用了@Async注解,但就沒有走多線程。

異步方法使用static關(guān)鍵詞修飾;異步類不是一個Spring容器的bean(一般使用注解@Component@Service,并且能被Spring掃描到);SpringBoot應(yīng)用中沒有添加@EnableAsync注解;在同一個類中,一個方法調(diào)用另外一個有@Async注解的方法,注解不會生效。原因是@Async注解的方法,是在代理類中執(zhí)行的。

通過上邊幾個示例,@Async實際還是通過Future或CompletableFuture來異步執(zhí)行的,Spring又封裝了一下,讓我們使用的更方便。

標簽:

推薦

財富更多》

動態(tài)更多》

熱點

久久久国产影视 久久香蕉综合-国模妙妙超大尺度啪啪人体-国产成年无码aⅴ片 右手影院亚洲欧美-美女高潮喷水白浆失禁 | 操操操人人乐人人干-gogogo手机免费高清-黑人初解禁薍伦黑人巨大在线观看-人妻av中字 中文字幕 - 精工厂 | 欧美黑粗硬大臊腚视频-国产精品77777竹菊影视小说-东北探花专业干老外-黑人精品--一区二区 | 鲁一鲁擦换色视频-男女涩涩网站 色噜噜亚洲-中文字幕欧美老熟妇一区二区-熟妇人妻精品猛力进入 | 操穴网站-日韩在线视频精品店在线日本亚洲A-熟妇美女-亚洲日韩av激情 | 最好的迅雷电影下载网,分享最新电影,高清电影、综艺、动漫、电视剧等下载!-丝袜av在线丝袜av天堂国产-日本少妇ⅩXXX无码妖精视频-DVD高清完整版播放 日韩欧美精品一区二区三区在线 | 今天高清无码视频-亚洲国产精品久久久久性色 三级古装片-越C越紧的名器-干赵丽颖日B免费观看 | 国产又粗又黄又爽又硬P站-日韩在线 np-欧美日韩淫荡女人-3B肉蒲团之四虎影库之嫩嫩草 | 久久久久久久久久久久久国产-中曰韩操逼大毛片基地-英国视频一级AAAAA网站-高清电影-免费完整版 国产成人一区二区三区视频免费 欧–美–性–交–黄–片-淫辱列车员(全黄h)-国模网站-亚洲激情四射 | 1000部男女免费拍拍拍无遮挡-全程粗话对白视频videos-伊人大香蕉狼人干伊网黄色小说-日本美女变态坐脸调教网站大全 | 品鲁一鲁一区二区-亚洲人毛茸茸孕妇-精品国产av 无码一区二区三区-一级一级免费黄色大片 | gogogo免费观看高清-有基ZZ视频在线-欧美不卡大片黑人-欧美第九页 | 日本人内射网站-青青av影院-999国产毛片动漫-中国妇女操穴视频 | 1080P神马影院在线 国内偷自拍对白视频-BD国语高清在线观看-操熟女露脸-毛片一二三四五六区捆绑系列 | 少妇88久久中文字幕-BD韩语高清在线 -国产精品无码一区二区三区喝尿-偷情出轨电影欧美-女人高潮网站-6699AV | 亚洲国产成人久久午夜-小莹好湿好紧太爽了电影在线-69XXXXXXXXXXX台湾-日日橹狠狠爱欧美超碰 | 美女黄片大全-台湾同性色网-农村30岁一级特黄大片-啊啊啊使劲插av | 成人网mm-奇米日日干-欧美熟妇肉体销魂孕妇-美女裸体自慰 | 熟女自慰400部-黑人干日本-国产无码aaa级黄片-美女聊天室 | 俄罗斯美女被猛烈进入-99视频在线免费观看-国产美女互慰-亚洲精品69 | 亚州女人逼-日本台湾韩国三级在线播放-www.海角一区-免费激情网站国产高清第一页 | 插插插宗合网-四川BBBB搡BBB搡B1图-国产一区三区三区-小美女日日日日 | 四虎1515HH欧美成人A片-国产熟妇被又大又粗又爽-女大兵free性VideO极品-伊人影院7 | 大香蕉理伦电影成人-美女裸体国产极品毛片-欧美 日本 国产在线观看-jiZZjiZZ黄大片 | 国产一级站17c-卡,99久久精品免费观看国产欧美日韩乱国产无遮挡-四虎4545www精品视频-嗯∽啊~轻点禁 揉胸视频网站观看- | 北条麻妃中出无码-给少妇添下面喝尿-亚洲av无码有乱码在线观看-婷婷色九月综合激情丁香 | 男女交配一进一出成人久久影院-魅影视频-亚洲国产福利一区二区三区-丰满少妇一区二区三区 | 国产精品久久久久久久小唯西川-精品人妻无码专区中文字幕-三全在线观看免费完整版中文高清-亚洲色图库无码中出 | HD动漫在线观看 ysl蜜桃色www-美女张开腿让男生捅尿囗的网站-国产欧美视频在线观看-31XX最新地址发布页 | 狠干老肥B-4k超清在线观看-国产亚洲精品精品精品-日BBB,操BBB | 厨房猛烈撞击白丝麻麻-youjizzjapan-日本女优爱爱-国产一级日本三级岁酱 | 超清动漫在线观看 中日精品无码一本二本三本-国产91美女在线观看-国产少妇探花无码视频-H自慰免费看 | 国产免费福利网站-超清日韩免费观看 日韩精品亚洲专区-jizz一区-深爱国产视频网 | 法国贵妇经典复古AV-添女人的荫蒂视频-亚洲无码中文字幕在线播放-永久性国产盗摄在线观看 | 俄罗斯肛交一区二区-极品性感美女自慰在线-DVD在线视频观看 凹凸视频国产在线观看-国产福利小视频在线播放 国产欧美日韩在线在线播放 | 天天性爱精品网站欧美-黑人巨粗进入娇小哭喊求饶-肉丝袜美女自慰出白浆-精品偷拍色 | 熟女系列15P-D英语高清在线观看 日韩中文字幕高清在线专区-北条麻妃第一次黑人-国产成人午夜精品一区二区三区 99re6这里有精品热视频 | 免费看操插-久久欧美粗大黑精品久久欧美人与兽美女群交-水户香奈和黑人40分钟-人与嘼一区二区三区免费 | 韩国三级电影叫床声一区二区三区三线电影叫床声一区二区三区三线电影叫床声-痴汉道日韩无码-日韩插插网-上床网站免费看 | 摸BBB揉BBB揉BBB视频火-国产操逼啊啊啊-丰满少妇被猛烈进入高清播放-下面湿的网站 | 武藤香凌《黑人初解禁》在线观看-国产成人免费不卡激情视频-欧美性春猛交~潘金莲-91国内外免费视频在线观看 |