日韩少妇无删减的电影在线视频观看-久久久伊人中文字幕-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)更多》

熱點

5O部脯乳奶水aV-好想被艹-分享最新电影-黑人色综合 | 互换玩着娇妻3pChinese-91精品国产一区二区三区竹菊-欧美黑人一级片-东北免费老师无码黄色片视屏网站大全 | 久久综合色之久久综合-KTV做爰视频一区二区-探花HD精品-国产午夜精品理论片久久 | 国产AV一级闺蜜-ww无码-李丽莎久久网站-四川少妇BBB操BBB | 亚洲欧美日韩在线-高级人妻上门北条麻妃-在线亚洲看黄色电影 japonensis18一25-欧美性爱男人天堂按摩大师 | 老熟女乱伦-国产免费久久精品99-VV一级影院-国产考屄久久 | 无码白嫩小泬无套在线观看-鲁一鲁在线视频***-四虎影视yyaa 在线播放-freex性日韩抽搐高潮喷射 | 国产一区二区高清-淫荡骚穴-精品国产一区二区三区久久狼黑人-1080日本电影免费 8164 9628 小蛮腰 网页无法访问 | cc视频欧美黄色一级毛片-91女人18毛片水多国产-国产精品国色综合久久 国产日本免费-BD韩语免费播放 免费秋霞一级 | 毛浓密超多黑毛熟女-一本色道无码北岛玲dod乱泡-伊人你懂得-国产又黄又爽 | 羞羞动漫成人a片在线观看-高清不卡完整在线观看,美国猛男做爱视频在线观看,91.n女免费在线破处,无水印-69A片-性摔跤xXx69性欧 | 欧美性大战久久久久久的安居码-大奶子婷婷-4k日本电影免费 亚洲精品无码久久毛-欧美亚在线视频 母乳妻av-亚洲欧美太紧了-肉番视频在线观看-都市 激情 春色 人妻 成人 | 大地中文27-久久伊人美女互操-巨大乳女人做爰毛片-琪琪影院大香蕉 | 91 丨牛牛丨熟女-国产亚洲美女自慰-胸大又黄的美女网站-加勒比一本道偷拍 | 社长秘书中出一乃葵-国产两位熟妇疯狂4p-欧美性爱去干网凝-肛交母狗双洞齐开少妇 | 亚洲中文字幕无码不卡电影-婷婷色综合97狠狠狠-最新更新国产区国产自产2019最新-国产精品嫩草影视 | 色琪琪久久se色-国产舔女人-a级毛片无码免费真人久久-成人视频在线观看 欧美日本一区二区三区桃色 | EEUSS鲁丝片Av无码安全直达-国产真实偷乱视频在线观看-18禁美女裸体自慰网站-偶偶福利电影 | 亚洲午夜成人精品电影在线观看-九九人妻-免费一级电影 佐佐木明希做的一半套被拿掉-BD日韩免费观看 特级aaaaaaaaa毛片免费视频 | 无码日逼视频-伊人大査蕉-日本肏屄网-美女簧片网站 | 中国老熟女-奶水尤物又软又喷奶水h羞羞视频-26uuu日韩-女人与大黄拘作爱免费 | 美足AV电影-九九九调教美女-初撮五十路丰满熟妇-淫大师av | 蓝阿姨一区二区三区-偷拍与自拍网-偷拍偷拍视频久久久-客厅用巨龙征服丝袜人妻 | 国产剧高清完整版播放 提供优质观影体验下载服务-紧缚人妻の乱绳地狱-大香蕉伊人影院-日韩去干网 | 日韩亚洲欧美高清一区二区久久-中国久久久精视频黄色片-婷深夜综合成人aⅴ网站。-BD免费观看韩国 视色视色视频在线观看 | jizzjizzjizz护士高潮-欧美性生交XXXXX-gogogo免费手机高清在线 日韩高清A片-PGD-736誘惑女教师痴女在线观看 | mm中出调教-456国产老肥熟视频-操逼伊人-裸体美女叉叉 | 操操操人人乐人人干-gogogo手机免费高清-黑人初解禁薍伦黑人巨大在线观看-人妻av中字 中文字幕 - 精工厂 | 操操操人人乐人人干-gogogo手机免费高清-黑人初解禁薍伦黑人巨大在线观看-人妻av中字 中文字幕 - 精工厂 | 羞羞动漫成人a片在线观看-高清不卡完整在线观看,美国猛男做爱视频在线观看,91.n女免费在线破处,无水印-69A片-性摔跤xXx69性欧 | 999日韩视频大全 -欧美一级AAAAABBBBB-欧美女同志免费TV-欧美性猛交xxxxx按摩欧美 | 伊伊成人网-亚洲宗人网-成人三级电影导航-ts人妖另类精品视频系列 | 国产做a爰片AAAAAOOOO-国产一区二区三区国产精品-RBD753奴隷色の女教师-欧美综合专区 | 中文字幕搜索结果 - 88AV-欧美 亚洲 自拍 日韩 在线-快手成人黄短视频短片-久久久久国产一区二区三区 | 日韩一区二区三区射精-久久少妇视频-精品国产午夜福利精品推荐-岛国色网综合 | 久久综合色之久久综合-KTV做爰视频一区二区-探花HD精品-国产午夜精品理论片久久 | 伊人干网在线-BD国语韩国电影在线观看 精品久久人妻av中文字幕-www.四虎视频-久久久久久精品毛片日韩不卡 | 动画片星星-中文字幕一本在线无卡-蓝光免费在线观看 首页亚洲欧美制服丝腿-搞逼中文字幕 | 免费公开在线自慰97-国产高潮失禁喷水爽到抽搐-美女扒开粉嫩尿口-试看120秒又黄又大视频 | 操操操人人乐人人干-gogogo手机免费高清-黑人初解禁薍伦黑人巨大在线观看-人妻av中字 中文字幕 - 精工厂 | 黑丝美女被c在线观看-亚洲中文字幕在线观看-中文字幕一区二区三区夫目前犯-中文字幕日韩专区下载 九九99热久久10精品 |