Java四种线程池的使用
FixedThreadPool
由Executors的newFixedThreadPool方法創(chuàng)建。它是一種線程數(shù)量固定的線程池,當(dāng)線程處于空閑狀態(tài)時(shí),他們并不會(huì)被回收,除非線程池被關(guān)閉。當(dāng)所有的線程都處于活動(dòng)狀態(tài)時(shí),新的任務(wù)都會(huì)處于等待狀態(tài),直到有線程空閑出來。FixedThreadPool只有核心線程,且該核心線程都不會(huì)被回收,這意味著它可以更快地響應(yīng)外界的請(qǐng)求。
FixedThreadPool沒有額外線程,只存在核心線程,而且核心線程沒有超時(shí)機(jī)制,而且任務(wù)隊(duì)列沒有長度的限制。
CachedThreadPool
由Executors的newCachedThreadPool方法創(chuàng)建,不存在核心線程,只存在數(shù)量不定的非核心線程,而且其數(shù)量最大值為Integer.MAX_VALUE。當(dāng)線程池中的線程都處于活動(dòng)時(shí)(全滿),線程池會(huì)創(chuàng)建新的線程來處理新的任務(wù),否則就會(huì)利用新的線程來處理新的任務(wù),線程池中的空閑線程都有超時(shí)機(jī)制,默認(rèn)超時(shí)時(shí)長為60s,超過60s的空閑線程就會(huì)被回收。和FixedThreadPool不同的是,CachedThreadPool的任務(wù)隊(duì)列其實(shí)相當(dāng)于一個(gè)空的集合,這將導(dǎo)致任何任務(wù)都會(huì)被執(zhí)行,因?yàn)樵谶@種場(chǎng)景下SynchronousQueue是不能插入任務(wù)的,SynchronousQueue是一個(gè)特殊的隊(duì)列,在很多情況下可以理解為一個(gè)無法儲(chǔ)存元素的隊(duì)列。從CachedThreadPool的特性看,這類線程比較適合執(zhí)行大量耗時(shí)較小的任務(wù)。當(dāng)整個(gè)線程池都處于閑置狀態(tài)時(shí),線程池中的線程都會(huì)因?yàn)槌瑫r(shí)而被停止回收,幾乎是不占任何系統(tǒng)資源。
ScheduledThreadPool
通過Executors的newScheduledThreadPool方式創(chuàng)建,核心線程數(shù)量是固定的,而非核心線程是沒有限制的,并且當(dāng)非核心線程閑置時(shí)它會(huì)被立即回收,ScheduledThreadPool這類線程池主要用于執(zhí)行定時(shí)任務(wù)和具有固定時(shí)期的重復(fù)任務(wù)。
延遲:
定時(shí):
public class ThreadPoolExecutorTest { public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); scheduledThreadPool.scheduleAtFixedRate(newRunnable(){ @Override public void run() {System.out.println("延遲1秒后每三秒執(zhí)行一次");}},1,3,TimeUnit.SECONDS);}}SingleThreadExecutor
通過Executors的newSingleThreadExecutor方法來創(chuàng)建。這類線程池內(nèi)部只有一個(gè)核心線程,它確保所有的任務(wù)都在同一個(gè)線程中按順序執(zhí)行。SingleThreadExecutor的意義在于統(tǒng)一所有外界任務(wù)一個(gè)線程中,這使得這些任務(wù)之間不需要處理線程同步的問題
總結(jié)
以上是生活随笔為你收集整理的Java四种线程池的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无法解析的外部符号 _WinMain@1
- 下一篇: Windows 10下,如何使用Powe