欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java之ThreadPoolExecutor類(lèi)詳解

 更新時(shí)間:2021年08月02日 08:49:27   作者:一只可愛(ài)的小狐貍  
這篇文章主要介紹了Java之ThreadPoolExecutor類(lèi)詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

ThreadPoolExecutor

ThreadPoolExecutor是線程池框架的一個(gè)核心類(lèi),線程池通過(guò)線程復(fù)用機(jī)制,并對(duì)線程進(jìn)行統(tǒng)一管理

  • 降低系統(tǒng)資源消耗。通過(guò)復(fù)用已存在的線程,降低線程創(chuàng)建和銷(xiāo)毀造成的消耗;
  • 提高響應(yīng)速度。當(dāng)有任務(wù)到達(dá)時(shí),無(wú)需等待新線程的創(chuàng)建便能立即執(zhí)行;
  • 提高線程的可管理性。線程是稀缺資源,如果無(wú)限制的創(chuàng)建,不僅會(huì)消耗大量系統(tǒng)資源,還會(huì)降低系統(tǒng)的穩(wěn) 定性,使用線程池可以進(jìn)行對(duì)線程進(jìn)行統(tǒng)一的分配、調(diào)優(yōu)和監(jiān)控。

線程池的運(yùn)行狀態(tài)總共有5種,其值和含義分別如下:

  • RUNNING: 高3位為111,接受新任務(wù)并處理阻塞隊(duì)列中的任務(wù)
  • SHUTDOWN: 高3位為000,不接受新任務(wù)但會(huì)處理阻塞隊(duì)列中的任務(wù)
  • STOP:高3位為001,不會(huì)接受新任務(wù),也不會(huì)處理阻塞隊(duì)列中的任務(wù),并且中斷正在運(yùn)行的任務(wù)
  • TIDYING: 高3位為010,所有任務(wù)都已終止,工作線程數(shù)量為0,線程池將轉(zhuǎn)化到TIDYING狀態(tài),即將要執(zhí)行 terminated()結(jié)束鉤子方法
  • TERMINATED: 高3位為011,terminated()方法已經(jīng)執(zhí)行結(jié)束

構(gòu)造器中各個(gè)參數(shù)的含義:

1.corePoolSize
線程池中的核心線程數(shù)。當(dāng)提交一個(gè)任務(wù)時(shí),線程池創(chuàng)建一個(gè)新線程執(zhí)行任務(wù),直到當(dāng)前線程數(shù)等于 corePoolSize;如果當(dāng)前線程數(shù)為corePoolSize,繼續(xù)提交的任務(wù)被保存到阻塞隊(duì)列中,等待被執(zhí)行。

2.maximumPoolSize
線程池中允許的大線程數(shù)。如果當(dāng)前阻塞隊(duì)列滿了,且繼續(xù)提交任務(wù),則創(chuàng)建新的線程執(zhí)行任務(wù),前提是當(dāng)前線 程數(shù)小于maximumPoolSize。

3.keepAliveTime

線程空閑時(shí)的存活時(shí)間。默認(rèn)情況下,只有當(dāng)線程池中的線程數(shù)大于corePoolSize時(shí),keepAliveTime才會(huì)起作 用,如果一個(gè)線程空閑的時(shí)間達(dá)到keepAliveTime,則會(huì)終止,直到線程池中的線程數(shù)不超過(guò)corePoolSize。但是 如果調(diào)用了allowCoreThreadTimeOut(boolean)方法,keepAliveTime參數(shù)也會(huì)起作用,直到線程池中的線程數(shù)為 0。

4.unit
keepAliveTime參數(shù)的時(shí)間單位。

5.workQueue
任務(wù)緩存隊(duì)列,用來(lái)存放等待執(zhí)行的任務(wù)。如果當(dāng)前線程數(shù)為corePoolSize,繼續(xù)提交的任務(wù)就會(huì)被保存到任務(wù)緩 存隊(duì)列中,等待被執(zhí)行。
一般來(lái)說(shuō),這里的BlockingQueue有以下三種選擇:
SynchronousQueue:一個(gè)不存儲(chǔ)元素的阻塞隊(duì)列,每個(gè)插入操作必須等到另一個(gè)線程調(diào)用移除操作,否則 插入操作一直處于阻塞狀態(tài)。因此,如果線程池中始終沒(méi)有空閑線程(任務(wù)提交的平均速度快于被處理的速 度),可能出現(xiàn)無(wú)限制的線程增長(zhǎng)。 LinkedBlockingQueue:基于鏈表結(jié)構(gòu)的阻塞隊(duì)列,如果不設(shè)置初始化容量,其容量Integer.MAX_VALUE, 即為無(wú)界隊(duì)列。因此,如果線程池中線程數(shù)達(dá)到了corePoolSize,且始終沒(méi)有空閑線程(任務(wù)提交的平均速度 快于被處理的速度),任務(wù)緩存隊(duì)列可能出現(xiàn)無(wú)限制的增長(zhǎng)。 ArrayBlockingQueue:基于數(shù)組結(jié)構(gòu)的有界阻塞隊(duì)列,按FIFO排序任務(wù)。

6.threadFactory
線程工廠,創(chuàng)建新線程時(shí)使用的線程工廠。

7.handler
任務(wù)拒絕策略,當(dāng)阻塞隊(duì)列滿了,且線程池中的線程數(shù)達(dá)到maximumPoolSize,如果繼續(xù)提交任務(wù),就會(huì)采取任 務(wù)拒絕策略處理該任務(wù),線程池提供了4種任務(wù)拒絕策略:

  • AbortPolicy:丟棄任務(wù)并拋出RejectedExecutionException異常,默認(rèn)策略;
  • CallerRunsPolicy:由調(diào)用execute方法的線程執(zhí)行該任務(wù);
  • DiscardPolicy:丟棄任務(wù),但是不拋出異常;
  • DiscardOldestPolicy:丟棄阻塞隊(duì)列前面的任務(wù),然后重新嘗試執(zhí)行任務(wù)(重復(fù)此過(guò)程)。
  • 當(dāng)然也可以根據(jù)應(yīng)用場(chǎng)景實(shí)現(xiàn)RejectedExecutionHandler接口自定義飽和策略,如記錄日志或持久化存儲(chǔ)不能處 理的任務(wù)。

到此這篇關(guān)于Java之ThreadPoolExecutor類(lèi)詳解的文章就介紹到這了,更多相關(guān)Java之ThreadPoolExecutor內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義錯(cuò)誤處理邏輯詳解

    SpringBoot自定義錯(cuò)誤處理邏輯詳解

    這篇文章主要介紹了SpringBoot自定義錯(cuò)誤處理邏輯,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • java中@NotBlank限制屬性不能為空

    java中@NotBlank限制屬性不能為空

    在實(shí)體類(lèi)的對(duì)應(yīng)屬性上添 @NotBlank注解,可以實(shí)現(xiàn)對(duì)空置的限制,本文就來(lái)介紹一下java中@NotBlank限制屬性不能為空,感興趣的可以了解一下
    2024-01-01
  • springboot中的controller注意事項(xiàng)說(shuō)明

    springboot中的controller注意事項(xiàng)說(shuō)明

    這篇文章主要介紹了springboot中的controller注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文教程

    struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文

    這篇文章主要介紹了struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開(kāi)發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java的常見(jiàn)熱門(mén)ORM框架優(yōu)缺點(diǎn)區(qū)別

    Java的常見(jiàn)熱門(mén)ORM框架優(yōu)缺點(diǎn)區(qū)別

    Java?ORM框架是一種用于將Java對(duì)象映射到關(guān)系型數(shù)據(jù)庫(kù)中的工具,使得開(kāi)發(fā)人員能夠通過(guò)對(duì)象操作數(shù)據(jù)庫(kù)而不必直接使用SQL查詢(xún),Java開(kāi)發(fā)變得更加高效和易于維護(hù),選擇適合你的ORM框架是根據(jù)你的需求決定的,比如你的應(yīng)用場(chǎng)景,數(shù)據(jù)結(jié)構(gòu)和技術(shù)水平等
    2024-02-02
  • spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    在電商系統(tǒng)中,秒殺,搶購(gòu),紅包優(yōu)惠卷等操作,一般都會(huì)設(shè)置時(shí)間限制,本文主要介紹了spring整合redis消息監(jiān)聽(tīng)通知使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建步驟

    Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建步驟

    這篇文章主要介紹了Hadoop+HBase+ZooKeeper分布式集群環(huán)境搭建,集群環(huán)境至少需要3個(gè)節(jié)點(diǎn),1個(gè)Master,2個(gè)Slave,節(jié)點(diǎn)之間局域網(wǎng)連接,可以相互ping通,本文通過(guò)實(shí)例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 基于Java注解(Annotation)的自定義注解入門(mén)介紹

    基于Java注解(Annotation)的自定義注解入門(mén)介紹

    要深入學(xué)習(xí)注解,我們就必須能定義自己的注解,并使用注解,在定義自己的注解之前,我們就必須要了解Java為我們提供的元注解和相關(guān)定義注解的語(yǔ)法
    2013-04-04
  • java二維數(shù)組實(shí)現(xiàn)推箱子小游戲

    java二維數(shù)組實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了java二維數(shù)組實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • SpringBoot時(shí)區(qū)問(wèn)題解決以及徹底解決時(shí)差問(wèn)題

    SpringBoot時(shí)區(qū)問(wèn)題解決以及徹底解決時(shí)差問(wèn)題

    這篇文章主要給大家介紹了關(guān)于SpringBoot時(shí)區(qū)問(wèn)題解決以及徹底解決時(shí)差問(wèn)題的相關(guān)資料,spring?boot作為微服務(wù)簡(jiǎn)易架構(gòu),擁有其自身的特點(diǎn),快速搭建架構(gòu),簡(jiǎn)單快捷,需要的朋友可以參考下
    2023-08-08

最新評(píng)論