400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > java > 【Java基礎(chǔ)知識(shí)】什么是線程池

【Java基礎(chǔ)知識(shí)】什么是線程池

  • 發(fā)布: java培訓(xùn)
  • 來(lái)源:Java培訓(xùn)干貨資料
  • 2020-03-25 17:42:01
  • 閱讀()
  • 分享
  • 手機(jī)端入口

多線程是為了能夠讓計(jì)算機(jī)資源合理的分配,對(duì)于處理不同的任務(wù)創(chuàng)建不同的線程進(jìn)行處理,但是計(jì)算機(jī)創(chuàng)建一個(gè)線程或者銷(xiāo)毀一個(gè)線程所花費(fèi)的也是比較昂貴的,有時(shí)候需要同時(shí)處理的事情比較多,就需要我們頻繁的進(jìn)行線程的創(chuàng)建和銷(xiāo)毀,這樣花費(fèi)的時(shí)間也是比較多的。為了解決這一問(wèn)題,我們就可以引用線程池的概念。

所謂線程池就是將線程集中管理起來(lái),當(dāng)需要線程的時(shí)候,可以從線程池中獲取空閑的線程,這樣可以減少線程的頻繁創(chuàng)建與銷(xiāo)毀,節(jié)省很大的時(shí)間和減少很多不必要的操作。

在java中提供了ThreadPoolExecutor類(lèi)來(lái)進(jìn)行線程的管理,這個(gè)類(lèi)繼承于AbstractExecutorService,而AbstractExecutorService實(shí)現(xiàn)了ExecutorService接口,我們可以使用ThreadPoolExecutor來(lái)進(jìn)行線程池的創(chuàng)建。

Java線程池

在ThreadPoolExecutor的構(gòu)造方法中,有多個(gè)參數(shù),可以配置不同的參數(shù)來(lái)進(jìn)行優(yōu)化。這個(gè)類(lèi)的源碼構(gòu)造方法為:

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個(gè)參數(shù)代表的意義分別為

corePoolSize : 線程池中的核心線程數(shù)量,當(dāng)線程池中當(dāng)前的線程數(shù)小于這個(gè)配置的時(shí)候,如果有一個(gè)新的任務(wù)到來(lái),即使線程池中還存在空閑狀態(tài)的線程,程序也會(huì)繼續(xù)創(chuàng)建一個(gè)新的線程放進(jìn)線程池當(dāng)中

maximumPoolSize: 線程池中的線程最大數(shù)量

keepAliveTime:當(dāng)線程池中的線程數(shù)量大于配置的核心線程數(shù)量(corePoolSize)的時(shí)候,如果當(dāng)前有空閑的線程,則當(dāng)這個(gè)空閑線程可以存在的時(shí)間,如果在keepAliveTime這個(gè)時(shí)間點(diǎn)內(nèi)沒(méi)有新的任務(wù)使用這個(gè)線程,那么這個(gè)線程將會(huì)結(jié)束,核心線程不會(huì)結(jié)束,但是如果配置了allowCoreThreadTimeOut = true,則當(dāng)空閑時(shí)間超過(guò)keepAliveTime之后,線程也會(huì)被結(jié)束調(diào),默認(rèn)allowCoreThreadTimeOut = false,即表示默認(rèn)情況下,核心線程會(huì)一直存在于線程池當(dāng)中。

unit : 空閑線程保持連接時(shí)間(keepAliveTime)的時(shí)間單位

workQueue:阻塞的任務(wù)隊(duì)列,用來(lái)保存等待需要執(zhí)行的任務(wù)。

threadFactory :線程工廠,可以根據(jù)自己的需求去創(chuàng)建線程的對(duì)象,設(shè)置線程的名稱(chēng),優(yōu)先級(jí)等屬性信息。

handler:當(dāng)線程池中存在的線程數(shù)超過(guò)設(shè)置的最大值之后,新的任務(wù)就會(huì)被拒絕,可以自己定義一個(gè)拒絕的策略,當(dāng)新任務(wù)被拒絕之后,就會(huì)使用hander方法進(jìn)行處理。

在java中也提供了Executors工具類(lèi),在這個(gè)工具類(lèi)中提供了多個(gè)創(chuàng)建線程池的靜態(tài)方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個(gè)方法都是創(chuàng)建了ThreadPoolExecutor對(duì)象,不同的是,每個(gè)對(duì)象的初始 參數(shù)值不一樣;

 

文章“【Java基礎(chǔ)知識(shí)】什么是線程池”已幫助

>>本文地址:http://nfbqydst.cn/zhuanye/2020/48531.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測(cè)試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營(yíng)銷(xiāo)互聯(lián)網(wǎng)營(yíng)銷(xiāo)
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營(yíng)全域電商運(yùn)營(yíng)
  • 軟件測(cè)試軟件測(cè)試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開(kāi)發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開(kāi)發(fā)智能機(jī)器人
 

快速通道fast track

近期開(kāi)班時(shí)間TIME