最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程池的優(yōu)點及池化技術的應用

 更新時間:2022年05月08日 16:26:54   作者:??Java中文社群????  
這篇文章主要介紹了Java線程池的優(yōu)點及池化技術的應用,Java種提高程序的執(zhí)行效率有兩種實現(xiàn)方法,一個是使用線程、另一個是使用線程池,下文我們就來具體介紹該詳細內(nèi)容吧,需要的小伙伴可以參考一下

前言:

在 Java 語言中,提高程序的執(zhí)行效率有兩種實現(xiàn)方法,一個是使用線程、另一個是使用線程池。而在生產(chǎn)環(huán)境下,我們通常會采用后者。為什么會這樣呢?今天我們就來聊聊線程池的優(yōu)點,以及池化技術及其應用。

1.池化技術

池化技術指的是提前準備一些資源,在需要時可以重復使用這些預先準備的資源。 池化技術的優(yōu)點主要有兩個:提前準備和重復利用。 以 Java 語言中的對象創(chuàng)建為例,在對象創(chuàng)建時要經(jīng)歷以下步驟:

  • 根據(jù) new 標識符后面的參數(shù),在常量池查找類的符號引用;
  • 如果沒找到符號應用(類并未加載),進行類的加載、解析、初始化等;
  • 虛擬機為對象在堆中分配內(nèi)存,并將分配的內(nèi)存初始化為 0,針對對象頭,建立相應的描述結構(耗時操作:需要查找堆中的空閑區(qū)域,修改內(nèi)存分配狀態(tài)等);
  • 調(diào)用對象的初始化方法(耗時操作:用戶的復雜的邏輯驗證等操作,如IO、數(shù)值計算是否符合規(guī)定等)。

從上述的流程中可以看出,創(chuàng)建一個類需要經(jīng)歷復雜且耗時的操作,因此我們應該盡量復用已有的類,以確保程序的高效運行,當然如果能夠提前創(chuàng)建這些類就再好不過了,而這些功能的實現(xiàn)依靠的就是池化技術

2.池化技術應用

常見的池化技術的應用有:線程池、內(nèi)存池、數(shù)據(jù)庫連接池、HttpClient 連接池等,接下來,我們分別來看。

2.1 線程池

線程池的原理很簡單,類似于操作系統(tǒng)中的緩沖區(qū)的概念。線程池中會先啟動若干數(shù)量的線程,這些線程都處于睡眠狀態(tài)。當客戶端有一個新的請求時,就會喚醒線程池中的某一個睡眠的線程,讓它來處理客戶端的這個請求,當處理完這個請求之后,線程又處于睡眠的狀態(tài)。 線程池能很高地提升程序的性能。比如有一個省級數(shù)據(jù)大集中的銀行網(wǎng)絡中心,高峰期每秒的客戶端請求并發(fā)數(shù)超過 100,如果為每個客戶端請求創(chuàng)建一個新的線程的話,那耗費的 CPU 時間和內(nèi)存都是十分驚人的,如果采用一個擁有 200 個線程的線程池,那將會節(jié)約大量的系統(tǒng)資源,使得更多的 CPU 時間和內(nèi)存用來處理實際的商業(yè)應用,而不是頻繁的線程創(chuàng)建和銷毀。 

2.2 內(nèi)存池

如何更好地管理應用程序內(nèi)存的使用,同時提高內(nèi)存使用的頻率,這是值得每一個開發(fā)人員深思的問題。內(nèi)存池(Memory Pool)就提供了一個比較可行的解決方案。 內(nèi)存池在創(chuàng)建的過程中,會預先分配足夠大的內(nèi)存,形成一個初步的內(nèi)存池。然后每次用戶請求內(nèi)存的時候,就會返回內(nèi)存池中的一塊空閑的內(nèi)存,并將這塊內(nèi)存的標志置為已使用。當內(nèi)存使用完畢釋放內(nèi)存的時候,也不是真正地調(diào)用 free 或 delete 的過程,而是把內(nèi)存放回內(nèi)存池的過程,且放回的過程要把標志置為空閑。最后,應用程序結束就會將內(nèi)存池銷毀,將內(nèi)存池中的每一塊內(nèi)存釋放。 內(nèi)存池的優(yōu)點

  • 減少內(nèi)存碎片的產(chǎn)生,這個優(yōu)點可以從創(chuàng)建內(nèi)存池的過程中看出,當我們在創(chuàng)建內(nèi)存池的時候,分配的都是一塊塊比較規(guī)整的內(nèi)存塊,減少內(nèi)存碎片的產(chǎn)生。
  • 提高了內(nèi)存的使用頻率。這個可以從分配內(nèi)存和釋放內(nèi)存的過程中看出。每次的分配和釋放并不是去調(diào)用系統(tǒng)提供的函數(shù)或操作符去操作實際的內(nèi)存,而是在復用內(nèi)存池中的內(nèi)存。

內(nèi)存池的缺點: 會造成內(nèi)存的浪費,因為要使用內(nèi)存池需要在一開始分配一大塊閑置的內(nèi)存,而這些內(nèi)存不一定全部被用到。

2.3 數(shù)據(jù)庫連接池

數(shù)據(jù)庫連接池的基本思想是在系統(tǒng)初始化的時候?qū)?shù)據(jù)庫連接作為對象存儲在內(nèi)存中,當用戶需要訪問數(shù)據(jù)庫的時候,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。在使用完畢后,用戶也不是將連接關閉,而是將連接放回到連接池中,以供下一個請求訪問使用,而這些連接的建立、斷開都是由連接池自身來管理的。 同時,還可以設置連接池的參數(shù)來控制連接池中的初始連接數(shù)、連接的上下限數(shù)和每個連接的最大使用次數(shù)、最大空閑時間等。當然,也可以通過連接池自身的管理機制來監(jiān)視連接的數(shù)量、使用情況等。

2.4 HttpClient連接池

HttpClient 我們經(jīng)常用來進行 HTTP 服務訪問。我們的項目中會有一個獲取任務執(zhí)行狀態(tài)的功能使用 HttpClient,一秒鐘請求一次,經(jīng)常會出現(xiàn) Conection Reset 異常。經(jīng)過分析發(fā)現(xiàn),問題是出在 HttpClient 的每次請求都會新建一個連接,當創(chuàng)建連接的頻率比關閉連接的頻率大的時候,就會導致系統(tǒng)中產(chǎn)生大量處于 TIME_CLOSED 狀態(tài)的連接,這個時候使用連接池復用連接就能解決這個問題。

3.線程池介紹

線程池是線程使用的一種模式,它將線程和任務的概念分離開,使用線程來執(zhí)行任務,并提供統(tǒng)一的線程管理和任務管理的實現(xiàn)方法,避免了頻繁創(chuàng)建和銷毀線程所帶來的性能開銷。

4.線程池優(yōu)點分析

線程池相比于線程來說,它不需要頻繁的創(chuàng)建和銷毀線程,線程一旦創(chuàng)建之后,默認情況下就會一直保持在線程池中,等到有任務來了,再用這些已有的線程來執(zhí)行任務,

如下圖所示: 

優(yōu)點1:復用線程,降低資源消耗

線程在創(chuàng)建時要開辟虛擬機棧、本地方法棧、程序計數(shù)器等私有線程的內(nèi)存空間,而銷毀時又要回收這些私有空間資源,

如下圖所示: 

而線程池創(chuàng)建了線程之后就會放在線程池中,因此線程池相比于線程來說,第一個優(yōu)點就是可以復用線程、減低系統(tǒng)資源的消耗。

優(yōu)點2:提高響應速度

線程池是復用已有線程來執(zhí)行任務的,而線程是在有任務時才新建的,所以相比于線程來說,線程池能夠更快的響應任務和執(zhí)行任務。

優(yōu)點3:管控線程數(shù)和任務數(shù)

線程池提供了更多的管理功能,這里管理功能主要體現(xiàn)在以下兩個方面:

  • 控制最大并發(fā)數(shù):線程池可以創(chuàng)建固定的線程數(shù),從而避免了無限創(chuàng)建線程的問題。當線程創(chuàng)建過多時,會導致系統(tǒng)執(zhí)行變慢,因為 CPU 核數(shù)是一定的、能同時處理的任務數(shù)也是一定的,而線程過多時就會造成線程惡意爭搶和線程頻繁切換的問題,從而導致程序執(zhí)行變慢,所以合適的線程數(shù)才是高性能運行的關鍵。
  • 控制任務最大數(shù):如果任務無限多,而內(nèi)存又不足的情況下,就會導致程序執(zhí)行報錯,而線程池可以控制最大任務數(shù),當任務超過一定數(shù)量之后,就會采用拒絕策略來處理多出的任務,從而保證了系統(tǒng)可以健康的運行。

優(yōu)點4:更多增強功能

線程池相比于線程來說提供了更多的功能,比如定時執(zhí)行和周期執(zhí)行等功能。

總結

池化技術指的是提前準備一些資源,在需要時可以重復使用這些預先準備的資源。

池化技術的優(yōu)點主要有兩個:

  • 提前準備和重復利用。
  • 線程池是池化技術的典型場景,

線程池的優(yōu)點主要有 4 點:

  • 1.復用線程,降低了資源消耗;
  • 2.提高響應速度;
  • 3.提供了管理線程數(shù)和任務數(shù)的能力;
  • 4.更多增強功能。?

到此這篇關于Java線程池的優(yōu)點及池化技術的應用的文章就介紹到這了,更多相關Java池化技術內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文搞懂Java創(chuàng)建線程的五種方法

    一文搞懂Java創(chuàng)建線程的五種方法

    本文主要為大家詳細介紹一下Java實現(xiàn)線程創(chuàng)建的五種常見方式,文中的示例代碼講解詳細,對我們學習有一定的幫助,感興趣的可以跟隨小編學習一下
    2022-06-06
  • SpringBoot在IDEA中實現(xiàn)熱部署的步驟

    SpringBoot在IDEA中實現(xiàn)熱部署的步驟

    這篇文章主要介紹了SpringBoot在IDEA中實現(xiàn)熱部署的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • this關鍵字詳解

    this關鍵字詳解

    這篇文章主要介紹了this關鍵字,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • java實現(xiàn)圖片上加文字水印(SpringMVC + Jsp)

    java實現(xiàn)圖片上加文字水印(SpringMVC + Jsp)

    這篇文章主要為大家詳細介紹了java實現(xiàn)在圖片上加文字水印的方法,水印可以是圖片或者文字,操作方便,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java客戶端通過HTTPS連接到Easysearch實現(xiàn)過程

    Java客戶端通過HTTPS連接到Easysearch實現(xiàn)過程

    這篇文章主要為大家介紹了Java客戶端通過HTTPS連接到Easysearch實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • java Springboot實現(xiàn)多文件上傳功能

    java Springboot實現(xiàn)多文件上傳功能

    這篇文章主要為大家詳細介紹了java Springboot實現(xiàn)多文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 詳解Java中類與對象的關系

    詳解Java中類與對象的關系

    這篇文章主要介紹了詳解Java中類與對象的關系,類的關鍵字是class,在Java編程里,類的作用相當于機械師手中的構造圖,如果沒有構造圖,就無法打造武器,同樣如果沒有類,就無法實例化,需要的朋友可以參考下
    2023-05-05
  • Java手寫簡易版HashMap的使用(存儲+查找)

    Java手寫簡易版HashMap的使用(存儲+查找)

    這篇文章主要介紹了Java手寫簡易版HashMap的使用(存儲+查找),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • java獲取文件編碼,jsoup獲取html純文本操作

    java獲取文件編碼,jsoup獲取html純文本操作

    這篇文章主要介紹了java獲取文件編碼,jsoup獲取html純文本操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Spring?Cloud?Sleuth?和?Zipkin?進行分布式跟蹤使用小結

    Spring?Cloud?Sleuth?和?Zipkin?進行分布式跟蹤使用小結

    分布式跟蹤是一種機制,我們可以使用它跟蹤整個分布式系統(tǒng)中的特定請求,分布式跟蹤允許您跟蹤分布式系統(tǒng)中的請求,本文給大家介紹Spring?Cloud?Sleuth?和?Zipkin?進行分布式跟蹤使用小結,感興趣的朋友一起看看吧
    2022-03-03

最新評論

化德县| 陇西县| 宿松县| 那曲县| 滦南县| 龙江县| 云龙县| 东乡族自治县| 濮阳县| 峨边| 武清区| 乐都县| 东兰县| 宁化县| 六枝特区| 前郭尔| 永吉县| 广水市| 尉氏县| 马公市| 南和县| 天津市| 年辖:市辖区| 万山特区| 株洲县| 凤台县| 永年县| 呼图壁县| 招远市| 琼中| 新闻| 齐河县| 辛集市| 凤翔县| 阳谷县| 乃东县| 曲沃县| 穆棱市| 建湖县| 靖州| 乐东|