内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

深入淺析java中線程池與線程池框架的原理-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)主營新鄉(xiāng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),新鄉(xiāng)h5小程序開發(fā)搭建,新鄉(xiāng)網(wǎng)站營銷推廣歡迎新鄉(xiāng)等地區(qū)企業(yè)咨詢

本篇文章給大家分享的是有關(guān)深入淺析java中線程池與線程池框架的原理,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

java 線程池詳解

什么是線程池?

提供一組線程資源用來復(fù)用線程資源的一個池子

為什么要用線程池?

線程的資源是有限的,當處理一組業(yè)務(wù)的時候,我們需要不斷的創(chuàng)建和銷毀線程,大多數(shù)情況下,我們需要反復(fù)的進行大量的創(chuàng)建和銷毀工作,這個動作對于服務(wù)器而言,也是很浪費的一種情況,這時候我們可以利用線程池來復(fù)用這一部分已經(jīng)創(chuàng)建過的線程資源,避免不斷的創(chuàng)建和銷毀的動作。

線程池的原理

創(chuàng)建好固定數(shù)量的線程,吧線程先存下來,有任務(wù)提交的時候,把資源放到等待隊列中,等待線程池中的任務(wù)隊列不斷的去消費處理這個隊列中的任務(wù)

java的線程池原理

有5個核心的屬性:大線程數(shù)量,核心線程數(shù)量,等待隊列,任務(wù)隊列,拒絕策略

它的執(zhí)行流程是這樣的:

  1. 工作者workers數(shù)量低于核心工作者數(shù)corePoolSize時會優(yōu)先創(chuàng)建一個工作者worker處理job,處理成功則返回。
  2. 工作者workers數(shù)量高于核心工作者數(shù)時會優(yōu)先把job放入到待處理隊列,放入隊列成功時處理結(jié)束。
  3. 步驟2中入隊失敗會識別工作者數(shù)是否還小于大工作者數(shù)maximumPoolsize,小于的話也會新創(chuàng)建一個工作者worker處理job。
  4. 執(zhí)行拒絕策略
     

java的線程池框架Executor

Executor里提供了4種類型的線程池:

newCachedThreadPool

  1. 緩存型池子,先查看池中有沒有以前建立的線程,如果有,就 reuse.如果沒有,就建一個新的線程加入池中
  2. 緩存型池子通常用于執(zhí)行一些生存期很短的異步型任務(wù),因此在一些面向連接的daemon型SERVER中用得不多。但對于生存期短的異步任務(wù),它是Executor的選。
  3. 能reuse的線程,必須是timeout IDLE內(nèi)的池中線程,缺省 timeout是60s,超過這個IDLE時長,線程實例將被終止及移出池。
     

注意,放入CachedThreadPool的線程不必擔心其結(jié)束,超過TIMEOUT不活動,其會自動被終止。

newFixedThreadPool

  1. newFixedThreadPool與cacheThreadPool差不多,也是能reuse就用,但不能隨時建新的線程
  2. 其獨特之處:任意時間點,最多只能有固定數(shù)目的活動線程存在,此時如果有新的線程要建立,只能放在另外的隊列中等待,直到當前的線程中某個線程終止直接被移出池子
  3. 和cacheThreadPool不同,F(xiàn)ixedThreadPool沒有IDLE機制(可能也有,但既然文檔沒提,肯定非常長,類似依賴上層的TCP或UDP IDLE機制之類的),所以FixedThreadPool多數(shù)針對一些很穩(wěn)定很固定的正規(guī)并發(fā)線程,多用于服務(wù)器
  4. 從方法的源代碼看,cache池和fixed 池調(diào)用的是同一個底層 池,只不過參數(shù)不同:fixed池線程數(shù)固定,并且是0秒IDLE(無IDLE),cache池線程數(shù)支持0-Integer.MAX_VALUE(顯然完全沒考慮主機的資源承受能力),60秒IDLE
     

newScheduledThreadPool

  1. 調(diào)度型線程池
     
  2. 這個池子里的線程可以按schedule依次delay執(zhí)行,或周期執(zhí)行
     

SingleThreadExecutor

  1. 單例線程,任意時間池中只能有一個線程
  2. 用的是和cache池和fixed池相同的底層池,但線程數(shù)目是1-1,0秒IDLE(無IDLE)
     

線程池調(diào)優(yōu)

一般來講對于一個線程池沒有固定的合適的參數(shù),只有通過不斷的去調(diào)整優(yōu)化參數(shù),找出最適合自己業(yè)務(wù)的參數(shù)才是最好的調(diào)優(yōu)方式,但是通常來講,線程池的初始化參數(shù)設(shè)置是有一定的公式可以借鑒的,在開始業(yè)務(wù)不是足夠膨脹的時候,我們可以通過以下的公式來計算出自己的核心參數(shù)的設(shè)置。

首先我們要確認業(yè)務(wù)類型,不同的業(yè)務(wù)有不同的計算公式:

  1. CPU密集型任務(wù)配置盡可能少的線程數(shù)量:cpu+1
  2. IO密集型任務(wù)則由于需要等待IO操作,線程并不是一直在執(zhí)行任務(wù),則配置盡可能多的線程,如2*Ncpu。
  3. 混合型的任務(wù),如果可以拆分,則將其拆分成一個CPU密集型任務(wù)和一個IO密集型任務(wù),只要這兩個任務(wù)執(zhí)行的時間相差不是太大,那么分解后執(zhí)行的吞吐率要高于串行執(zhí)行的吞吐率,如果這兩個任務(wù)執(zhí)行時間相差太大,則沒必要進行分解。我們可以通過Runtime.getRuntime().availableProcessors()方法獲得當前設(shè)備的CPU個數(shù)。

以上就是深入淺析java中線程池與線程池框架的原理,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

文章名稱:深入淺析java中線程池與線程池框架的原理-創(chuàng)新互聯(lián)
分享路徑:http://www.rwnh.cn/article34/hdepe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、搜索引擎優(yōu)化面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、微信小程序、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
汪清县| 台北市| 晋宁县| 漳平市| 醴陵市| 石棉县| 广宗县| 汕尾市| 连江县| 丰宁| 巴林左旗| 南开区| 藁城市| 河曲县| 宁南县| 河津市| 沾化县| 仁怀市| 鹤庆县| 凤山市| 卓尼县| 仁化县| 枣强县| 镇雄县| 逊克县| 永定县| 秭归县| 清原| 治县。| 同心县| 莲花县| 桂阳县| 陈巴尔虎旗| 东兰县| 龙江县| 开远市| 高邮市| 沙雅县| 江孜县| 通山县| 林甸县|