成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot中的異步多線程使用及避坑指南

開發 前端
Spring Boot提供了@Async注解來支持異步方法調用,結合合適的線程池配置,可以很容易地實現異步多線程處理,提升系統的并發能力和性能。

在現代的Web應用開發中,處理請求時需要考慮到系統的性能和響應速度。特別是在處理大量請求或者需要進行耗時操作時,采用異步多線程處理是一種常見的解決方案。Spring Boot提供了@Async注解來支持異步方法調用,結合合適的線程池配置,可以很容易地實現異步多線程處理,提升系統的并發能力和性能。

今日內容介紹,大約花費9分鐘

圖片圖片

1.配置線程池

@Configuration
@EnableAsync
public class AsyncConfiguration {
    @Bean("doSomethingExecutor")
    public Executor doSomethingExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 核心線程數:線程池創建時候初始化的線程數
        executor.setCorePoolSize(10);
        // 最大線程數:線程池最大的線程數,只有在緩沖隊列滿了之后才會申請超過核心線程數的線程
        executor.setMaxPoolSize(20);
        // 緩沖隊列:用來緩沖執行任務的隊列大小
        executor.setQueueCapacity(500);
        // 允許線程的空閑時間60秒:當超過了核心線程之外的線程在空閑時間到達之后會被銷毀
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("do-something-");
          // 緩沖隊列滿了之后的拒絕策略:由調用線程處理(一般是主線程
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
        executor.initialize();
        return executor;
    }
}

在這個配置中,我們使用了ThreadPoolTaskExecutor作為線程池的實現,并且設置了一些關鍵參數,如核心線程數、最大線程數、緩沖隊列大小等。如果不太了解線程池的小伙伴可以看一下之前介紹線程池介紹線程池的核心參數,線程池的執行原理知道

2. @Async注解

在需要異步執行的方法上使用@Async注解。這樣的方法將會在一個單獨的線程中執行,而不會阻塞主線程。

@Slf4j
@Service
public class AsyncService {
   // 指定使用beanname為doSomethingExecutor的線程池
    @Async("doSomethingExecutor")
    public  CompletableFuture<String> doSomething(String message) throws InterruptedException {
        log.info("doSomethingExecutor thread name  ={}", Thread.currentThread().getName());
        Thread.sleep(1000);
        return CompletableFuture.completedFuture(message);
    }
}

doSomething()方法被標記為異步方法,并且指定了使用名為"doSomethingExecutor"的線程池進行執行。

3. 異步多結果聚合返回CompletableFuture

在某些情況下,我們可能需要等待多個異步任務執行完畢后再進行下一步操作,這時可以使用CompletableFuture來實現異步多結果的聚合。

@RestController
@RequestMapping
public class AsyncController {

    @Autowired
    private AsyncService asyncService;


    @GetMapping("/open/somethings")
    public List<String> somethings() throws InterruptedException {
        int count = 6;
        List<CompletableFuture<String>> futures = new ArrayList<>();
        List<String> results = new ArrayList<>();
        // 啟動多個異步任務,并將 CompletableFuture 對象存儲在列表中
        for (int i = 1; i < count; i++) {
            CompletableFuture<String> future = asyncService.doSomething("index: "+i);
            futures.add(future);
        }
        
        for (CompletableFuture<String> future : futures) {
            String result = future.get(); // 阻塞等待異步任務完成并獲取結果
            results.add(result);
        }
        return results;
    }
}

我們通過循環啟動了多個異步任務,將返回的 CompletableFuture 對象存儲在列表中。然后,我們再次循環遍歷這些 CompletableFuture 對象,并調用 get() 方法來阻塞等待異步任務完成,獲取結果。最后,將結果添加到結果列表中并返回

4. 測試

使用瀏覽器發送http://localhost:8888/open/somethings,結果如下

圖片圖片

發現使用多個線程執行方法

圖片圖片

5.注意事項

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

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

異步方法使用注解@Async的返回值只能為void或者Future及其子類,當返回結果為其他類型時,方法還是會異步執行,但是返回值都是null

責任編輯:武曉燕 來源: springboot葵花寶典
相關推薦

2021-09-16 19:22:06

Java概念concurrent

2025-02-26 08:13:23

2020-09-13 09:19:10

LinuxPython3.6

2024-04-24 13:45:00

2024-04-03 12:30:00

C++開發

2021-02-26 00:46:11

CIO數據決策數字化轉型

2024-08-26 08:29:55

2020-12-16 10:00:59

Serverless數字化云原生

2022-03-04 18:11:16

信服云

2021-05-07 21:53:44

Python 程序pyinstaller

2023-05-24 10:06:42

多云實踐避坑

2021-02-22 17:00:31

Service Mes微服務開發

2021-05-08 12:30:03

Pythonexe代碼

2018-01-20 20:46:33

2025-02-24 00:10:00

2020-06-12 11:03:22

Python開發工具

2021-04-28 09:26:25

公有云DTS工具

2025-04-27 00:04:00

C#異步編程

2020-08-26 07:37:25

Nacos微服務SpringBoot

2023-11-01 15:32:58

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线观看免费观看 | 欧美区日韩区 | 91免费看片 | 久久久久久久久国产成人免费 | 国产第一页在线播放 | 国产精品一区二区三区在线播放 | 国产欧美在线视频 | 色综合99 | 日韩免费在线视频 | 在线播放中文字幕 | 久久99精品久久久久久国产越南 | 精品国产18久久久久久二百 | 精品久久九 | 国产视频福利一区 | 欧美精品在线一区 | 国产精品高潮呻吟久久av野狼 | 久久久久久亚洲 | 亚洲网站观看 | 伊人久久精品一区二区三区 | yiren22综合网成人 | 亚洲欧美综合网 | 欧美激情一区二区 | 国产精品a久久久久 | 免费国产黄网站在线观看视频 | 精品麻豆剧传媒av国产九九九 | 国产精品毛片一区二区在线看 | 欧美精品欧美精品系列 | 毛片国产| 亚洲精品一二三区 | 中文字幕视频免费 | av天天澡天天爽天天av | 一本一道久久a久久精品蜜桃 | 岛国毛片在线观看 | 欧美成人免费在线视频 | 亚洲 欧美 另类 综合 偷拍 | 免费在线观看av网站 | 亚洲精品一区二区三区蜜桃久 | 欧洲色综合 | 亚洲97| 四虎成人在线播放 | 精品一区二区三区在线观看 |