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

Java線程池7個(gè)參數(shù)的含義

 更新時(shí)間:2022年05月08日 16:01:56   作者:??Java中文社群????  
這篇文章主要介紹了Java線程池7個(gè)參數(shù)的含義,所謂的線程池的?7?大參數(shù)是指,在使用?ThreadPoolExecutor?創(chuàng)建線程池時(shí)所設(shè)置的?7?個(gè)參數(shù),下文更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下

所謂的線程池的 7 大參數(shù)是指,在使用 ThreadPoolExecutor 創(chuàng)建線程池時(shí)所設(shè)置的 7 個(gè)參數(shù),

如以下源碼所示:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
    //...
}

這 7 個(gè)參數(shù)分別是:

  • corePoolSize:核心線程數(shù)。
  • maximumPoolSize:最大線程數(shù)。
  • keepAliveTime:空閑線程存活時(shí)間。
  • TimeUnit:時(shí)間單位。
  • BlockingQueue:線程池任務(wù)隊(duì)列。
  • ThreadFactory:創(chuàng)建線程的工廠。
  • RejectedExecutionHandler:拒絕策略。

參數(shù)1:corePoolSize

核心線程數(shù):是指線程池中長期存活的線程數(shù)。

這就好比古代大戶人家,會(huì)長期雇傭一些“長工”來給他們干活,這些人一般比較穩(wěn)定,無論這一年的活多活少,這些人都不會(huì)被辭退,都是長期生活在大戶人家的。

參數(shù)2:maximumPoolSize

最大線程數(shù):線程池允許創(chuàng)建的最大線程數(shù)量,當(dāng)線程池的任務(wù)隊(duì)列滿了之后,可以創(chuàng)建的最大線程數(shù)。

這是古代大戶人家最多可以雇傭的人數(shù),比如某個(gè)節(jié)日或大戶人家有人過壽時(shí),因?yàn)榛钐啵瑑H靠“長工”是完不成任務(wù),這時(shí)就會(huì)再招聘一些“短工”一起來干活,這個(gè)最大線程數(shù)就是“長工”+“短工”的總?cè)藬?shù),也就是招聘的人數(shù)不能超過 maximumPoolSize。

注意事項(xiàng):

最大線程數(shù) maximumPoolSize 的值不能小于核心線程數(shù) corePoolSize,否則在程序運(yùn)行時(shí)會(huì)報(bào) IllegalArgumentException 非法參數(shù)異常,

如下圖所示: 

參數(shù)3:keepAliveTime

空閑線程存活時(shí)間,當(dāng)線程池中沒有任務(wù)時(shí),會(huì)銷毀一些線程,銷毀的線程數(shù)=maximumPoolSize(最大線程數(shù))-corePoolSize(核心線程數(shù))。

還是以大戶人家為例,當(dāng)大戶人家比較忙的時(shí)候就會(huì)雇傭一些“短工”來干活,但等干完活之后,不忙了,就會(huì)將這些“短工”辭退掉,而 keepAliveTime 就是用來描述沒活之后,短工可以在大戶人家待的(最長)時(shí)間。

參數(shù)4:TimeUnit

時(shí)間單位:空閑線程存活時(shí)間的描述單位,此參數(shù)是配合參數(shù) 3 使用的。 參數(shù) 3 是一個(gè) long 類型的值,比如參數(shù) 3 傳遞的是 1,那么這個(gè) 1 表示的是 1 天?還是 1 小時(shí)?還是 1 秒鐘?是由參數(shù) 4 說了算的。

TimeUnit 有以下 7 個(gè)值:

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小時(shí)
  • TimeUnit.MINUTES:分
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微妙
  • TimeUnit.NANOSECONDS:納秒

參數(shù)5:BlockingQueue

阻塞隊(duì)列:線程池存放任務(wù)的隊(duì)列,用來存儲(chǔ)線程池的所有待執(zhí)行任務(wù)。 它可以設(shè)置以下幾個(gè)值:

  • ArrayBlockingQueue:一個(gè)由數(shù)組結(jié)構(gòu)組成的有界阻塞隊(duì)列。
  • LinkedBlockingQueue:一個(gè)由鏈表結(jié)構(gòu)組成的有界阻塞隊(duì)列。
  • SynchronousQueue:一個(gè)不存儲(chǔ)元素的阻塞隊(duì)列,即直接提交給線程不保持它們。
  • PriorityBlockingQueue:一個(gè)支持優(yōu)先級排序的無界阻塞隊(duì)列。
  • DelayQueue:一個(gè)使用優(yōu)先級隊(duì)列實(shí)現(xiàn)的無界阻塞隊(duì)列,只有在延遲期滿時(shí)才能從中提取元素。
  • LinkedTransferQueue:一個(gè)由鏈表結(jié)構(gòu)組成的無界阻塞隊(duì)列。與SynchronousQueue類似,還含有非阻塞方法。
  • LinkedBlockingDeque:一個(gè)由鏈表結(jié)構(gòu)組成的雙向阻塞隊(duì)列。

比較常用的是 LinkedBlockingQueue,線程池的排隊(duì)策略和 BlockingQueue 息息相關(guān)。

參數(shù)6:ThreadFactory

線程工廠:線程池創(chuàng)建線程時(shí)調(diào)用的工廠方法,通過此方法可以設(shè)置線程的優(yōu)先級、線程命名規(guī)則以及線程類型(用戶線程還是守護(hù)線程)等。

 線程工廠的使用示例如下:

public static void main(String[] args) {
    // 創(chuàng)建線程工廠
    ThreadFactory threadFactory = new ThreadFactory() {
        @Override
        public Thread newThread(Runnable r) {
            // 創(chuàng)建線程池中的線程
            Thread thread = new Thread(r);
            // 設(shè)置線程名稱
            thread.setName("Thread-" + r.hashCode());
            // 設(shè)置線程優(yōu)先級(最大值:10)
            thread.setPriority(Thread.MAX_PRIORITY);
            //......
            return thread;
        }
    };
    // 創(chuàng)建線程池
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 0,
                                                                   TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
                                                                   threadFactory); // 使用自定義的線程工廠
    threadPoolExecutor.submit(new Runnable() {
        @Override
        public void run() {
            Thread thread = Thread.currentThread();
            System.out.println(String.format("線程:%s,線程優(yōu)先級:%d",
                                             thread.getName(), thread.getPriority()));
        }
    });
}

以上程序的執(zhí)行結(jié)果如下: 

 從上述執(zhí)行結(jié)果可以看出,自定義線程工廠起作用了,線程的名稱和線程的優(yōu)先級都是通過線程工廠設(shè)置的。

參數(shù)7:RejectedExecutionHandler

拒絕策略:當(dāng)線程池的任務(wù)超出線程池隊(duì)列可以存儲(chǔ)的最大值之后,執(zhí)行的策略。 默認(rèn)的拒絕策略有以下 4 種:

  • AbortPolicy:拒絕并拋出異常。
  • CallerRunsPolicy:使用當(dāng)前調(diào)用的線程來執(zhí)行此任務(wù)。
  • DiscardOldestPolicy:拋棄隊(duì)列頭部(最舊)的一個(gè)任務(wù),并執(zhí)行當(dāng)前任務(wù)。
  • DiscardPolicy:忽略并拋棄當(dāng)前任務(wù)。

線程池的默認(rèn)策略是AbortPolicy 拒絕并拋出異常。

總結(jié)

本文介紹了線程池的 7 大參數(shù):

  • corePoolSize:核心線程數(shù),線程池正常情況下保持的線程數(shù),大戶人家“長工”的數(shù)量。
  • maximumPoolSize:最大線程數(shù),當(dāng)線程池繁忙時(shí)最多可以擁有的線程數(shù),大戶人家“長工”+“短工”的總數(shù)量。
  • keepAliveTime:空閑線程存活時(shí)間,沒有活之后“短工”可以生存的最大時(shí)間。
  • TimeUnit:時(shí)間單位,配合參數(shù) 3 一起使用,用于描述參數(shù) 3 的時(shí)間單位。
  • BlockingQueue:線程池的任務(wù)隊(duì)列,用于保存線程池待執(zhí)行任務(wù)的容器。
  • ThreadFactory:線程工廠,用于創(chuàng)建線程池中線程的工廠方法,通過它可以設(shè)置線程的命名規(guī)則、優(yōu)先級和線程類型。
  • RejectedExecutionHandler:拒絕策略,當(dāng)任務(wù)量超過線程池可以保存的最大任務(wù)數(shù)時(shí),執(zhí)行的策略。

到此這篇關(guān)于Java線程池7個(gè)參數(shù)的含義的文章就介紹到這了,更多相關(guān)Java線程池參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入學(xué)習(xí)MyBatis中的參數(shù)(推薦)

    深入學(xué)習(xí)MyBatis中的參數(shù)(推薦)

    大家日常使用MyBatis經(jīng)常會(huì)遇到一些異常,想要避免參數(shù)引起的錯(cuò)誤,我們需要深入了解參數(shù)。想了解參數(shù),我們首先看MyBatis處理參數(shù)和使用參數(shù)的全部過程。下面這篇文章主要給大家介紹了MyBatis中參數(shù)的的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • Spring注解驅(qū)動(dòng)之BeanFactoryPostProcessor原理解析

    Spring注解驅(qū)動(dòng)之BeanFactoryPostProcessor原理解析

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)之BeanFactoryPostProcessor原理,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Spring中@Autowired注解作用在方法上和屬性上說明

    Spring中@Autowired注解作用在方法上和屬性上說明

    這篇文章主要介紹了Spring中@Autowired注解作用在方法上和屬性上說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java清除u盤內(nèi)存卡里的垃圾文件示例

    java清除u盤內(nèi)存卡里的垃圾文件示例

    手機(jī)內(nèi)存卡空間被用光了,但又不知道哪個(gè)文件占用了太大,一個(gè)個(gè)文件夾去找又太麻煩,開發(fā)了個(gè)小程序把手機(jī)所有文件(包括路徑下所有層次子文件夾下的文件)進(jìn)行一個(gè)排序,這樣你就可以找出哪個(gè)文件占用了內(nèi)存太大了
    2014-02-02
  • java實(shí)現(xiàn)sunday算法示例分享

    java實(shí)現(xiàn)sunday算法示例分享

    Sunday算法的思想和BM算法中的壞字符思想非常類似。差別只是在于Sunday算法在匹配失敗之后,是取目標(biāo)串中當(dāng)前和Pattern字符串對應(yīng)的部分后面一個(gè)位置的字符來做壞字符匹配,寫了個(gè)小例子來實(shí)現(xiàn)以下這個(gè)算法
    2014-01-01
  • SpringBoot整合Redisson的兩種方式

    SpringBoot整合Redisson的兩種方式

    這篇文章主要介紹了Spring Boot整合Redisson的兩種方式,方式一直接使用yml配置,方式二創(chuàng)建RedissonConfig配置類,文中通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • MyBatis實(shí)戰(zhàn)之Mapper注解的示例

    MyBatis實(shí)戰(zhàn)之Mapper注解的示例

    本文主要介紹了MyBatis實(shí)戰(zhàn)之Mapper注解的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 教你怎么用Java獲取國家法定節(jié)假日

    教你怎么用Java獲取國家法定節(jié)假日

    這篇文章主要介紹了教你怎么用Java獲取國家法定節(jié)假日,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 淺談JAVA Actor模型的一致性與隔離性

    淺談JAVA Actor模型的一致性與隔離性

    這篇文章主要介紹了JAVA Actor模型的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的學(xué)習(xí)JAVA,感興趣的朋友可以了解下
    2020-06-06
  • Java中的Null到底是什么

    Java中的Null到底是什么

    null是沒有地址,""是有地址但是里面的內(nèi)容是空的,好比做飯 null說明連鍋都沒有 而""則是有鍋沒米,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來詳細(xì)學(xué)習(xí)一下它吧
    2019-06-06

最新評論

大港区| 崇礼县| 达拉特旗| 浦城县| 丰县| 临泉县| 报价| 泾川县| 成武县| 克东县| 农安县| 美姑县| 呼伦贝尔市| 陆川县| 搜索| 平和县| 察哈| 茌平县| 商水县| 谢通门县| 临清市| 池州市| 无为县| 遂昌县| 昌乐县| 六盘水市| 登封市| 拜泉县| 乐都县| 芒康县| 南丹县| 罗山县| 台南县| 慈利县| 海安县| 阳春市| 吕梁市| 于都县| 丹江口市| 基隆市| 莱西市|