關(guān)注微信公眾號(hào)
創(chuàng)頭條企服版APP
對(duì)于Java程序猿來(lái)說(shuō),線程池是面試高頻題,是我們必須掌握的一個(gè)技能,本篇文章主要給大家講解四種線程池的使用。線程池就是首先創(chuàng)建一些線程,它們的集合稱為線程池。使用線程池可以很好地提高性能,線程池在系統(tǒng)啟動(dòng)時(shí)即創(chuàng)建大量空閑的線程,程序?qū)⒁粋€(gè)任務(wù)傳給線程池,線程池就會(huì)啟動(dòng)一條線程來(lái)執(zhí)行這個(gè)任務(wù),執(zhí)行結(jié)束以后,該線程并不會(huì)死亡,而是再次返回線程池中成為空閑狀態(tài),等待執(zhí)行下一個(gè)任務(wù)。
線程池的工作機(jī)制:在線程池的編程模式下,任務(wù)是提交給整個(gè)線程池,而不是直接提交給某個(gè)線程,線程池在拿到任務(wù)后,就在內(nèi)部尋找是否有空閑的線程,如果有,則將任務(wù)交給某個(gè)空閑的線程。
一個(gè)線程同時(shí)只能執(zhí)行一個(gè)任務(wù),但可以同時(shí)向一個(gè)線程池提交多個(gè)任務(wù)。使用線程池的原因:多線程運(yùn)行時(shí)間,系統(tǒng)不斷的啟動(dòng)和關(guān)閉新線程,成本非常高,會(huì)過(guò)渡消耗系統(tǒng)資源,以及過(guò)渡切換線程的危險(xiǎn),從而可能導(dǎo)致系統(tǒng)資源的崩潰。這時(shí),線程池就是最好的選擇了。
四種常見(jiàn)的線程池
Executors.newCacheThreadPool():可緩存線程池,先查看池中有沒(méi)有以前建立的線程,如果有,就直接使用。如果沒(méi)有,就建一個(gè)新的線程加入池中,緩存型池子通常用于執(zhí)行一些生存期很短的異步型任務(wù),線程池為無(wú)限大,當(dāng)執(zhí)行當(dāng)前任務(wù)時(shí)上一個(gè)任務(wù)已經(jīng)完成,會(huì)復(fù)用執(zhí)行上一個(gè)任務(wù)的線程,而不用每次新建線程
Executors.newFixedThreadPool(int n):創(chuàng)建一個(gè)可重用固定個(gè)數(shù)的線程池,以共享的無(wú)界隊(duì)列方式來(lái)運(yùn)行這些線程。
Executors.newScheduledThreadPool(int n):創(chuàng)建一個(gè)定長(zhǎng)線程池,支持定時(shí)及周期性任務(wù)執(zhí)行
Executors.newSingleThreadExecutor():創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級(jí))執(zhí)行。
歡迎大家在評(píng)論區(qū)評(píng)論留言,千鋒重慶Java的小編會(huì)及時(shí)給大家解答疑惑的
2021-11-02 千鋒教育重慶發(fā)布了 《Java學(xué)習(xí)爆破專欄丨Spring Security系列教程之實(shí)現(xiàn)CAS單點(diǎn)登錄上篇-概述》的文章
2021-10-28 千鋒教育重慶發(fā)布了 《爆破專欄丨Spring Security系列教程之Spring Security的四種權(quán)限控制方式》的文章
2021-07-27 千鋒教育重慶發(fā)布了 《千鋒憑借豐富企業(yè)資源,為多所高校學(xué)子提供名企實(shí)訓(xùn)機(jī)會(huì)》的文章
2021-05-10 千鋒教育重慶發(fā)布了 《“創(chuàng)新 變革 匠心 育人”千鋒教研院2021教研升級(jí)戰(zhàn)略發(fā)布會(huì)即將隆重啟幕》的文章
2021-04-27 千鋒教育重慶發(fā)布了 《第三屆山東省計(jì)算機(jī)職業(yè)教育大會(huì)隆重召開(kāi) 千鋒教育受邀參會(huì)》的文章