springboot中線程池的使用

一、概念

????????線程池就是將多個線程對象放入一個池子里面,例如一個池塘,線程池就是這個池塘,池塘里面的魚就是線程池中的多個線程對象。1. 每一個線程,在一段時間內只能執行一個任務。2. 線程池中的各個線程是可以重復使用的。

二、創建線程池的基本步驟

  1. 添加依賴(如果你使用的是Spring Boot,通常已經包含了必要的依賴):

    確保你的pom.xml(Maven)或build.gradle(Gradle)文件中包含了Spring Boot的依賴。

  2. 配置線程池

    在你的Spring Boot配置類(通常帶有@Configuration注解)中,你可以創建一個TaskExecutor的Bean。例如,使用ThreadPoolTaskExecutor

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

    注意@EnableAsync注解,它啟用了異步方法的支持。你可以將此注解放在你的配置類上,或者使用@Async注解在你的服務或組件中直接指定某個方法為異步執行。

    線程池的參數說明:

    corePoolSize:核心線程數

    maximumPoolSize:最大線程數

    keepAliveTime:最大空閑時間

    unit:最大空閑時間單位

    workQueue:任務隊列

    handler:拒絕策略,有以下四種

    (1)ThreadPoolExecutor.AbortPolicy 丟棄任務,并拋出 RejectedExecutionException 異常。

    (2)ThreadPoolExecutor.CallerRunsPolicy:該任務被線程池拒絕,由調用 execute方法的線程執行該任務。

    (3)ThreadPoolExecutor.DiscardOldestPolicy : 拋棄隊列最前面的任務,然后重新嘗試執行任務。

    (4)ThreadPoolExecutor.DiscardPolicy,丟棄任務,不過也不拋出異常。

    也可以自己實現RejectedExecutionHandler接口來自定義拒絕策略

  3. 使用線程池

    在你的服務或組件中,你可以使用@Async注解來指定某個方法應該異步執行,并使用上面配置的線程池。Spring會自動使用你配置的TaskExecutor來執行這些方法。

    @Service  
    public class AsyncService {  @Autowired  private TaskExecutor taskExecutor; // 也可以使用@Qualifier指定具體的Bean名,如@Qualifier("taskExecutor")  // 或者你可以直接通過@Async注解并使用默認配置的線程池  @Async  public void asyncMethod() {  // 異步執行的代碼  }  // 使用自定義的TaskExecutor執行異步任務  public void executeAsync(Runnable task) {  taskExecutor.execute(task);  }  
    }

    請注意,如果你的AsyncService中的方法是通過接口定義的,并且你正在使用基于接口的代理(這是Spring AOP的默認行為),那么只有通過代理調用這些方法時,@Async注解才會生效。這意味著,如果你從同一個類的另一個方法中調用帶有@Async注解的方法,它不會異步執行。

  4. 監控和調優

    ?

    你可以使用Spring Boot的Actuator模塊來監控你的線程池。通過添加Actuator的依賴并啟用相關端點,你可以查看線程池的實時狀態,如當前線程數、活動線程數、任務隊列大小等。這有助于你根據應用程序的實際需求調整線程池的配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16001.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年內外貿一體化融合發展(長沙)交易會 ?辦公文具、禮品工藝品展

2024年內外貿一體化融合發展(長沙)交易會 辦公文具、禮品工藝品展 時間:2024年7月12-14日 地點:湖南國際會展中心(芒果館) 湖南省商廳 關于邀請參加2024內外貿一體化融合發展(長沙&#xf…

Weblogic XML反序列化漏洞 [CVE-2017-10271]

漏洞環境搭建請參考 http://t.csdnimg.cn/i11e2 漏洞原理 Weblogic的wls security組件對外提供webservice服務,wls security組件使用了xmldecoder來解析用戶傳入的xml數據,如果用戶進行xml惡意數據的構造,即可觸發反序列化漏洞 漏洞版本 O…

簡述vue的實現原理

Vue.js 的實現原理可以概括為以下幾個方面: 響應式系統: Vue 的核心是其響應式系統。當 Vue 實例被創建時,它會遍歷 data 對象中的所有屬性,并使用 Object.defineProperty 方法將其轉換為 getter 和 setter。當 data 中的屬性發生…

python:如何創建簡單的流媒體服務器來播放.flv文件

要在Python中創建一個簡單的流媒體服務器來播放FLV(Flash Video)文件,你通常需要一個HTTP服務器,該服務器能夠處理對FLV文件的范圍請求(Range Requests),因為流媒體通常不是一次性下載整個文件&…

CentOS 7.9 郵箱部署——Postfix+Dovecot詳細

PostfixDovecot 文章目錄 PostfixDovecot資源列表基礎環境一、部署DNS二、部署postfix和dovecot2.1、配置postfix2.2、配置dovecot2.3、創建郵件用戶 三、發送郵件測試3.1、windows安裝poxmail3.2、登錄郵箱3.3、發送接收郵件 四、搭建SSL認證加密4.1、生成私鑰4.2、生成公鑰4.…

正則工具類

目錄 1、 * 正則工具類 1.1、 * 提供驗證郵箱、手機號、電話號碼、身份證號碼、數字等方法 1.1.1、 * 驗證固定電話號碼 1.1.2、 * 驗證整數(正整數和負整數) 1.1.3、 * 驗證整數和浮點數(正負整數和正負浮點數)

貪心算法4(c++)

過河的最短時間 題目描述 輸入 在漆黑的夜里,N位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,N個人一共只帶了一只手電筒,而橋窄得只夠讓兩個人同時過,如果…

YOLOv8_pose預測流程-原理解析[關鍵點檢測理論篇]

YOLOv8_seg的網絡結構圖在博客YOLOv8網絡結構介紹_CSDN博客已經更新了,由網絡結構圖可以看到相對于目標檢測網絡,實例分割網絡只是在Head層不相同,如下圖所示,在每個特征層中增加了KeyPoint分支(淺綠色),通過兩個卷積組和一個Conv卷積得到得到通道數為51的特征圖,51表示…

window環境下QT5開發環境的搭建

1、安裝visual Stusio 15 生成工具2012 2、安裝Visual studio Enterprise 2017 3、Visual studio Enterprise 2017安裝完成之后, 修改:選擇桌面調試,如下: 4、打開QTcreator,選項中,配置編譯器&#xff…

摸魚大數據——Hive基礎理論知識——Hive環境準備

Hive環境準備 1、shell腳本執行方式 方式1: sh 腳本 注意: 需要進入腳本所在目錄,但腳本有沒有執行權限不影響執行 方式2: ./腳本 注意: 需要進入腳本所在目錄,且腳本必須有執行權限 方式3: /絕對路徑/腳本 注意: 不需要進入腳本所在目錄,但必須有執行…

線程池,日志

所要用到的知識點: 多線程的創建 生產消費模型, 線程鎖 條件變量 代碼: 線程池日志

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值的功能

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹TM1638鍵盤數碼…

C++面向對象程序設計 - 輸入和輸出

程序的輸入指的是文件將數據傳送給程序,程序的輸出指的是從程序將數據傳送輸出文件。 C的輸入和和輸出包括以下三個方面: 對系統指定的標準設備的輸入和輸出,即從鍵盤輸入數據,輸出到顯示器屏幕。以外存磁盤(或光盤、…

初探 Spring Boot Starter Security:構建更安全的Spring Boot應用

引言 Spring Boot 作為 Java 生態系統下的熱門框架,以其簡潔和易上手著稱。而在構建 Web 應用程序時,安全性始終是開發者必須重視的一個方面。Spring Boot Starter Security 為開發者提供了一個簡單但功能強大的安全框架,使得實現身份驗證和…

從動態代理角度簡單理解Spring AOP

1. 概述 動態代理 是指在運行時,動態地創建目標類的代理對象,并對其中特定的方法進行攔截或增強的技術。這種技術主要用于在不修改目標類代碼的情況下,增強目標類的功能。 在Java中,動態代理主要基于Java的反射機制和接口來實現…

gdc2024:Raytracing in Snowdrop技術實現與性能優化策略

在今年的GDC(游戲開發者大會)的Advanced Graphics Summit上,關于Snowdrop引擎中光線追蹤技術的討論引起了廣泛關注。 一、光線追蹤全局照明的實現細節 屏幕空間追蹤: 屏幕空間追蹤從相機出發,對屏幕上的每個像素點生成…

DDL—表—數據類型—字符串類型相關語法

(1)表格可視化 普通字符串 類型大小描述CHAR0~255 bytes定長字符串,其表示即使你存儲一個字符,它也會占用你括號里個數的字符的空間,因為未占用的字符的其它空間會用空格進行補位。需要再后面跟一個參數:…

harmony 鴻蒙ArkUI動畫/交互事件開發常見問題(ArkTS)

ArkUI動畫/交互事件開發常見問題(ArkTS) 焦點事件onBlur/onFocus回調無法觸發(API 9) 問題現象 焦點事件onBlur/onFocus回調無法觸發 解決措施 焦點事件默認情況下需要外接鍵盤的Tab鍵,或方向鍵觸發,點擊觸發焦點事件需要添加焦點控制屬性focusOnTo…

Linux 監控USB硬盤插拔事件并自動掛載和卸載

定義udev規則來監控USB插拔事件。 一、在/etc/udev/rules.d目錄下隨意創建一個規則文件,例:99-usb-mount.rules KERNEL"sd[b-z]?",SUBSYSTEM"block",RUN"/usr/local/src/mountusb.sh %k $env{ACTION}"二、創建 /usr/lo…

基于arm64架構國產操作系統|Linux下的RTMP|RTSP低延時直播播放器開發探究

技術背景 2014年4月8日起,美國微軟公司停止了對Windows XP SP3操作系統提供服務支持,這引起了社會和廣大用戶的廣泛關注和對信息安全的擔憂。而2020年對Windows7服務支持的終止再一次推動了國產系統的發展。工信部對此表示,將繼續加大力度&a…