精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入淺出Java/Spring/Spring Boot異步多線程

開發 前端
一個線程池可以維護多個線程,這些線程等待任務來進行并發處理。線程池模式避免了頻繁創建和銷毀短期任務線程,復用池中的線程從而提高了性能。線程池中的線程在處理任務時是并發進行的。

1、Java的多線程

1.1 線程池模式

一個線程池可以維護多個線程,這些線程等待任務來進行并發處理。線程池模式避免了頻繁創建和銷毀短期任務線程,復用池中的線程從而提高了性能。線程池中的線程在處理任務時是并發進行的。

線程池(綠色方塊)/等待處理任務隊列(藍色)/處理完成任務(黃色)

該模式允許創建的線程數量及其生命周期。 我們還能夠安排任務的執行并將傳入的任務保持在隊列(Task Queue)中。

線程池數量的大小可根據程序可用的計算資源進行調整,它通常是程序的可調參數,經過調整以優化程序的性能。 確定最佳線程池大小對于優化性能至關重要。

1.2 Java的線程池ThreadPoolExecutor

Java中的ThreadPoolExecutor是一個可擴展的線程池的實現,它提供了對很多參數的微調設置。這些參數包括:

ThreadPoolExecutor的構造器:

public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler) {
//...
}

示例:

ThreadPoolExecutor executorPool = new ThreadPoolExecutor(5, 10, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50));

corePoolSize:第1個參數“5”。JVM會為前5個任務創建線程,后續的任務會放進隊列里,直到隊列滿為止(第5個參數workQueue,50個任務)。

maximumPoolSize:第2個參數“10”。JVM最多創建10個線程,這意味著當當前正有5個線程運行著5個任務,而這時任務隊列的50個任務已滿,此時如果有一個新的任務到達隊列,JVM將創建一個新的線程,最多創建5個,直至10個。

keepAliveTime:第3個參數“3秒”,超出核心線程而小于最大線程的這些線程,在一定的空閑時間之后將被清除掉。

unit:第4個參數“秒”,keepAliveTime的時間單位。

workQueue:第5個參數“new ArrayBlockingQueue<Runnable>(50)”,任務隊列的大小。

JVM創建線程的規則如下:

  • 如果線程數少于corePoolSize,創建新的線程來跑任務。
  • 如何線程數等于或大于corePoolSize,將任務放進隊列。
  • 如果隊列滿了,且線程數小于maximumPoolSize,創建新的線程跑任務。
  • 如果隊列滿了,且線程數量大于或等于maximumPoolSize,拒絕任務。

2、Spring的多線程

Spring/Spring Boot只需要在配置類上注解“@EnableAsync”,在需要使用單獨線程的方法上使用“@Async”注解即可。Spring會自動檢索線程池的定義,可以是“org.springframework.core.task.TaskExecutor”或者是“java.util.concurrent.Executor”的名為“taskExecutor”的bean。若都未找到,則使用“org.springframework.core.task.SimpleAsyncTaskExecutor”來處理異步方法的調用。

我們最簡單可以通過自定一個名為“taskExecutor”的Bean即可。

@Configuration
@EnableAsync
class AsyncConfigurationByBean {
@Bean(name="taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(50);
executor.setThreadNamePrefix("poolThread-");
executor.initialize();
return executor;
}

}

Spring也提供了“AsyncConfigurer”接口用來定制實現異步多線程相關的配置。

@Configuration
@EnableAsync
class AsyncConfigurationByConfigurer implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(50);
executor.setThreadNamePrefix("poolThread-");
executor.initialize();
return executor;
}

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return AsyncConfigurer.super.getAsyncUncaughtExceptionHandler();
}
}

3、Spring Boot的多線程

在Spring Boot下,通過“TaskExecutionAutoConfiguration”自動配置類,Spring Boot給我們已經自動配置好了線程池,“TaskExecutionProperties”提供了相關的屬性配置。在Spring Boot下我們只需要在配置類上“@EnableAsync”,在“application.yml”上配置即可:

spring:
task:
execution:
pool:
core-size: 5
max-size: 10
queue-capacity: 50
thread-name-prefix: poolThread-

4、多線程演示

新建一個使用異步方法的類和方法:

@Service
@Slf4j
class AsyncService {
@Async
public void doSomething(Integer i){
log.info("當前是循環:" + i);
}
}

在Spring Boot入口類調用:

@SpringBootApplication
@EnableAsync
public class SpringAsyncApplication {

public static void main(String[] args) {
SpringApplication.run(SpringAsyncApplication.class, args);
}

@Bean
CommandLineRunner commandLineRunner(AsyncService asyncService){
return p -> {
for(int i = 0 ; i < 10 ; i ++){
asyncService.doSomething(i);
}
};
}
}

運行結果:

從圖中可以看出我們的核心線程數量是5,你可以按照上節的“JVM創建線程的規則”來調整核心線程、最大線程、隊列數量的來嘗試一下觀察控制臺輸出的結果。

5、多線程異步結果演示

我們有時候會在單一的請求中調用多個方法,在同步的方法里,我們都是順序執行,執行完一個再執行下一個。我們可以通過Spring的“AsyncResult”讓多個方法并發執行并聚合他們的結果,并提高性能。

我們先看一下,在同步的情況下是什么樣的:

@Service
class Service1 {
public Integer doSomething() throws InterruptedException {
Thread.sleep(2000);
log.info("在Service1中");
return 1;
}
}
@Service
class Service2 {
public Integer doSomething() throws InterruptedException {
Thread.sleep(2000);
log.info("在Service2中");
return 2 ;
}
}
@Bean
CommandLineRunner commandLineRunner(Service1 service1, Service2 service2){
return p -> {
long start = System.currentTimeMillis();
Integer first = service1.doSomething();
Integer second = service2.doSomething();
Integer sum = first + second;
long end = System.currentTimeMillis();
Long cost = end - start;
log.info("結果為:" + sum + ",耗時" + cost);
};
}

示例中,一個線程順序執行兩個方法,執行結果為:

在一個線程中

我們現在使用“@Async”使方法變成異步,且使用“AsyncResult”包裝異步結果返回。

“CompletableFuture”是Java8引入的,以提供一種編寫異步、非阻塞和多線程代碼的簡單方法。我們使用“AsyncResult”包裝返回值,并用它的“.completable()”方法獲得“CompletableFuture”對象。

@Service
@Slf4j
class Service1 {
@Async
public CompletableFuture<Integer> doSomething() throws InterruptedException {
Thread.sleep(2000);
log.info("在Service1中");
return new AsyncResult<Integer>(1).completable();
}
}
@Service
@Slf4j
class Service2 {
@Async
public CompletableFuture<Integer> doSomething() throws InterruptedException {
Thread.sleep(2000);
log.info("在Service2中");
return new AsyncResult<Integer>(2).completable();
}
}
@Bean
CommandLineRunner commandLineRunner(Service1 service1, Service2 service2){
return p -> {
long start = System.currentTimeMillis();
CompletableFuture<Integer> firstData = service1.doSomething();
CompletableFuture<Integer> secondData = service2.doSomething();
CompletableFuture<Integer> mergeResult = firstData.thenCompose(
firstValue -> secondData.thenApply(
secondValue -> firstValue + secondValue
)
);
long end = System.currentTimeMillis();
Long cost = end - start;
log.info("結果為:" + mergeResult.get() + ",耗時" + cost);
};
}

本文轉載自今日「愛科學的衛斯理」,可以通過以下二維碼關注。轉載本文請聯系愛科學的衛斯理。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-09-01 08:27:34

Java多線程程序

2025-03-27 09:38:35

2009-06-29 15:25:00

Java多線程

2022-01-12 08:54:52

Spring編程架構設計

2022-10-31 09:00:24

Promise數組參數

2023-12-04 13:22:00

JavaScript異步編程

2011-01-27 10:11:46

J2EEjavaspring

2020-05-27 20:25:47

SpringSpringBoot數據

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2017-06-06 15:24:13

springElasticSear架構

2017-06-20 15:20:54

spring-data案例詳解

2017-06-14 10:53:58

spring-data快速入門

2021-07-20 15:20:02

FlatBuffers阿里云Java

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構調度器

2012-05-21 10:06:26

FrameworkCocoa

2022-09-26 09:01:15

語言數據JavaScript

2019-11-11 14:51:19

Java數據結構Properties

2009-11-30 16:46:29

學習Linux
點贊
收藏

51CTO技術棧公眾號

欧美性猛交xxxxx少妇| 日韩av高清在线看片| 国产乱叫456在线| 亚洲高清毛片| 尤物99国产成人精品视频| 91免费视频污| 碰碰在线视频| 一区二区在线观看av| 欧美日韩一区在线播放| av加勒比在线| 日韩 欧美一区二区三区| 欧美日韩第一视频| 中国1级黄色片| 婷婷成人影院| 欧美岛国在线观看| 中文字幕av专区| 欧亚av在线| 一二三区精品福利视频| 亚洲精美视频| 三级毛片在线免费看| 国产精品中文字幕欧美| 国产精品白嫩初高中害羞小美女| 国产真实乱人偷精品视频| 色97色成人| 亚洲一区二区福利| av无码av天天av天天爽| 欧美a级大片在线| 欧美精品国产精品| www.欧美日本| 日韩三级影视| 欧美三级欧美成人高清www| 久操手机在线视频| 黄色网页在线观看| 中日韩av电影| 日韩成人av网站| 日本人妖在线| www亚洲一区| 精品日本一区二区三区| 蜜臀av在线观看| 国产激情一区二区三区桃花岛亚洲| 国产精品久久999| 久久人妻免费视频| 亚洲欧美日韩国产一区| 韩国三级电影久久久久久| 国产性xxxx| 亚洲精品国产成人影院| 久久久精品视频成人| 国产午夜精品福利视频| 欧美三级情趣内衣| 亚洲香蕉在线观看| 人妻少妇无码精品视频区| 人妖一区二区三区| 亚洲精品自拍第一页| 天天躁日日躁狠狠躁免费麻豆| 日韩中文字幕在线一区| 欧美一区二区在线视频| 亚洲精品在线网址| 日本精品视频| 欧美不卡一区二区三区四区| 国产精品熟女一区二区不卡| 国产精品99久久免费| 91精品一区二区三区久久久久久 | 国产va在线视频| 性久久久久久久| 六月丁香婷婷激情| 吉吉日韩欧美| 精品视频在线免费观看| 超碰在线资源站| 91精品短视频| 日韩成人中文字幕在线观看| 性欧美13一14内谢| 欧美激情偷拍自拍| 欧美久久精品午夜青青大伊人 | 精品久久久中文| 久久精品一区二| 精品久久在线| 欧美一区二区三区在线看| 一级黄色免费视频| 久久不卡国产精品一区二区| 最近2019中文字幕mv免费看| 国产精品 欧美激情| 亚洲国产婷婷| 国产精品黄色av| 国产丰满美女做爰| 久久综合九色综合欧美98| 亚洲精品在线免费| 羞羞的网站在线观看| 欧美日韩美女视频| 高潮一区二区三区| 超碰成人在线观看| 亚洲性线免费观看视频成熟| 欧美丰满艳妇bbwbbw| 香蕉精品999视频一区二区 | 激情婷婷综合网| 精品国产一区二| 日韩av网站导航| 久久视频一区二区三区| 亚洲国产1区| 国产精品视频自在线| 亚洲av无码乱码国产麻豆 | 亚洲国产精品小视频| 五月婷婷欧美激情| 1000部精品久久久久久久久| 国产精品电影一区| 免费看黄色一级视频| 欧美国产视频在线| 欧美精品久久久久久久久久久| 78精品国产综合久久香蕉| 精品日产卡一卡二卡麻豆| 五月婷婷婷婷婷| 99国产精品视频免费观看一公开| 成人免费视频网址| 亚洲欧洲精品视频| 亚洲一区二区三区精品在线| 色综合天天在线| 国产欧美精品日韩| 欧美美乳在线| 亚洲午夜免费视频| www.污污视频| jlzzjlzz亚洲女人| 992tv成人免费影院| 国产理论片在线观看| 日本一区二区三区四区在线视频 | 亚洲全部视频| 亚洲最大福利网站| 免费网站看v片在线a| 一本久久a久久精品亚洲| 任你躁av一区二区三区| 欧美精品国产一区二区| 成人性生交大片免费观看嘿嘿视频| 欧美老女人性开放| 亚洲成人一二三| 国产成人精品一区二区在线小狼| 日韩国产一区二区| 日韩女优人人人人射在线视频| 无码精品人妻一区二区三区影院| 亚洲靠逼com| www.午夜av| 国产精品成人a在线观看| 国产精品成人av在线| 日本a一级在线免费播放| 亚洲h在线观看| 中文字幕人妻一区| 国产精品激情电影| 亚洲另类一区二区| 亚洲一区在线免费| 成人国产综合| 深夜福利亚洲导航| 亚洲最大成人av| 中文字幕在线免费不卡| 亚洲精品久久久久久宅男| 日韩在线观看| 欧美精品一区二区三区精品| 国产精品96久久久久久| 国产高清免费av在线| 欧美偷拍一区二区| 一二三四国产精品| 久久国产福利国产秒拍| 综合视频在线观看| 日韩一区网站| 久久久噜噜噜久久久| 少妇喷水在线观看| 一本一本久久a久久精品综合麻豆| av在线网站观看| 日韩精品电影在线| 亚洲天堂电影网| 国产精久久一区二区| 久久久久久免费精品| 亚洲欧洲视频在线观看| 欧美在线观看视频在线| 国产真实乱在线更新| 成人短视频下载| 国产精品少妇在线视频| 99久久99久久精品国产片果冰| av成人观看| 中文字幕人成乱码在线观看| 色av中文字幕一区| 丰满人妻一区二区三区无码av| 欧美日韩另类视频| 99热99这里只有精品| 成人精品视频网站| 四季av一区二区| 综合精品久久| 蜜桃传媒视频麻豆一区| 伊人久久大香伊蕉在人线观看热v| 欧美成人午夜激情| 日本免费不卡| 91精品国产一区二区三区| 日本中文字幕在线免费观看| 国产精品欧美综合在线| 久久无码专区国产精品s| 亚洲综合欧美| 麻豆传媒网站在线观看| 九九免费精品视频在线观看| 91精品久久久久久久| av小说在线播放| 日韩在线视频免费观看高清中文 | 精品国产免费一区二区三区香蕉| 日本中文字幕久久| 一片黄亚洲嫩模| 欧美a在线播放| 99re这里只有精品首页| 午夜诱惑痒痒网| 欧美午夜一区二区福利视频| 青青草原一区二区| 黄色网址视频在线观看| 亚洲国产成人精品女人久久久 | 麻豆免费在线视频| 91麻豆精品国产91久久久更新时间 | 国产免费黄色片| 红桃视频成人在线观看| 青花影视在线观看免费高清| 久久久久久久久久久黄色| 成人一区二区三区仙踪林| 免播放器亚洲一区| 欧美成人精品欧美一级乱| 悠悠资源网久久精品| 亚洲最新免费视频| 欧美亚洲国产精品久久| 久久伦理网站| 精品人人人人| 91视频免费在线观看| 亚洲欧美一级| 国产噜噜噜噜噜久久久久久久久| 日韩影片中文字幕| 欧洲精品毛片网站| a国产在线视频| 欧美激情精品久久久久久大尺度| 黄网站在线播放| 日韩三级成人av网| 日本美女在线中文版| 国产亚洲一区二区精品| 青青草在线播放| 亚洲男人天堂古典| 视频二区在线观看| 亚洲精品一区二区三区精华液| 99久久国产热无码精品免费| 91精品国产麻豆| 国产又粗又猛又黄又爽| 欧美日韩精品欧美日韩精品一| 欧美 亚洲 另类 激情 另类| 色综合天天视频在线观看| 97久久久久久久| 丁香五六月婷婷久久激情| 婷婷激情五月网| 精品福利在线观看| wwwxxx亚洲| 色先锋久久av资源部| 亚洲色成人www永久网站| 色欧美88888久久久久久影院| 国产99免费视频| 在线观看免费视频综合| 免费在线观看av的网站| 欧美网站一区二区| 中文字幕一区二区三区波野结| 欧美日韩一区 二区 三区 久久精品| 中文字幕 视频一区| 在线电影欧美成精品| 精品人妻少妇嫩草av无码专区| 日韩欧美国产一二三区| 日本黄视频在线观看| 精品视频久久久久久久| 国产一二在线观看| 久久国产一区二区三区| 在线三级电影| 91高清视频免费| 日本.亚洲电影| 成人乱人伦精品视频在线观看| 色妞ww精品视频7777| 国产精品一码二码三码在线| 蜜桃精品wwwmitaows| 亚洲欧洲一区二区福利| 综合久久十次| av黄色在线网站| 美女视频网站久久| 被黑人猛躁10次高潮视频| 99天天综合性| www.com.av| 五月激情综合色| 在线观看日批视频| 精品国产免费一区二区三区香蕉| 免费国产在线视频| 欧美wwwxxxx| 在线看片福利| 亚洲精品欧美日韩| 亚洲精品进入| 2021国产视频| 性色一区二区三区| 91欧美一区二区三区| 91碰在线视频| 成人在线观看免费完整| 狠狠色狠狠色综合日日五| 一级二级三级视频| 亚洲国产欧美精品| 嫩草香蕉在线91一二三区| 97精品久久久中文字幕免费| 久久99国产精品二区高清软件| 国产成人亚洲欧美| 久久大综合网| 九九九九免费视频| 国产福利精品一区| 日本伦理一区二区三区| 亚洲高清免费一级二级三级| 人妻中文字幕一区二区三区| 精品国产百合女同互慰| 麻豆tv在线| 国产精品激情av在线播放| 免费观看成人www动漫视频| 26uuu成人| 秋霞影院一区二区| 亚洲一区二区三区无码久久| 亚洲免费观看高清完整版在线观看 | www免费视频观看在线| 国产成人啪精品视频免费网| 国产精品极品| 久久久无码中文字幕久...| 男人操女人的视频在线观看欧美| 欧美 日本 国产| 亚洲午夜视频在线观看| 国产强被迫伦姧在线观看无码| 一区二区三区视频在线 | 极品中文字幕一区| 一区二区三区四区毛片| 亚洲国产精品99久久久久久久久| 欧美一级特黄视频| 亚洲国产精品久久久久久| 国产精品一卡二卡三卡| 国产欧美一区二区三区久久| 欧美理论在线播放| 99视频精品免费| 久久精品一区二区三区不卡牛牛 | 久久人人九九| 国产午夜久久| 你懂得在线视频| 精品成人久久av| 十八禁一区二区三区| 韩剧1988免费观看全集| 国产精品自在线拍| 欧美成人高潮一二区在线看| 成人性视频网站| 久久精品无码人妻| 亚洲精品xxxx| 牛牛精品一区二区| 欧美中日韩免费视频| 日韩av不卡一区二区| 黄色免费一级视频| 欧美日韩成人在线| 黄色国产网站在线播放| 亚洲精品免费一区二区三区| 欧美喷水视频| 亚洲美女在线播放| 狠狠躁夜夜躁人人爽天天天天97| 婷婷在线观看视频| 热re91久久精品国99热蜜臀| 欧美精美视频| 黄色手机在线视频| 亚洲欧洲综合另类| 成人精品在线播放| 777精品视频| 国产欧美日韩影院| xxww在线观看| 亚洲综合另类小说| 亚洲aaa在线观看| 国产精品久久国产精品99gif| 久久综合国产| 小日子的在线观看免费第8集| 亚洲成av人片在线观看| 飘雪影视在线观看免费观看| 国产精品免费久久久| 欧美91福利在线观看| 午夜男人的天堂| 色婷婷av久久久久久久| 免费在线观看黄| 国产乱码精品一区二区三区日韩精品 | 国产伦精品一区二区三区视频| 男女啪啪网站视频| 亚洲欧美日韩久久| 无码精品视频一区二区三区| 国产精品久久久久av免费| 欧美国产精品| 五十路六十路七十路熟婆| 欧美三级乱人伦电影| 密臀av在线| 亚洲激情电影在线| 本田岬高潮一区二区三区| 欧美一级做a爰片免费视频| 欧美日韩成人在线播放| 久久av免费| aaa黄色大片| 欧美日本在线一区| 男人久久天堂| 国产在线无码精品| 国产亚洲成av人在线观看导航| 亚洲AV无码精品色毛片浪潮| 国产精品ⅴa在线观看h| 欧美天天在线| 国产又粗又长又黄的视频| 亚洲国产精品福利| 国产精品一站二站| 久久精品影视大全|