重慶市建設網(wǎng)站站長網(wǎng)站seo查詢
JDK 中提供了 5 中不同線程池的創(chuàng)建方式:
newCachedThreadPool
newCachedThreadPool, 是一種可以緩存的線程池,它可以用來處理大量短期的突發(fā)流量。
它的特點有三個,最大線程數(shù)是 Integer.MaxValue,線程存活時間是 60 秒, 阻塞隊列用的是 SynchronousQueue,這是一種不存才任何元素的阻塞隊列,也就是每提交一個任務給到線程池,都會分配一個工作線程來處理,由于最大線程數(shù)沒有限制。所以它可以處理大量的任務,另外每個工作線程又可以存活 60s,使得這些工作線程可以緩存起來應對更多任務的處理。
newFixedThreadPool
newFixedThreadPool,是一種固定線程數(shù)量的線程池。它的特點是核心線程和最大線程數(shù)量都是一個固定的值如果任務比較多工作線程處理不過來,就會加入到阻塞隊列里面等待。
newSingleThreadExecutor
newSingleThreadExecutor,只有一個工作線程的線程池。并且線程數(shù)量無法動態(tài)更改,因此可以保證所有的任務都按照 FIFO 的方式順序執(zhí)行。
newScheduledThreadPool
newScheduledThreadPool,具有延遲執(zhí)行功能的線程池可以用它來實現(xiàn)定時調(diào)度。
newWorkStealingPool
newWorkStealingPool,Java8 里面新加入的一個線程池它內(nèi)部會構建一個 ForkJoinPool,利用工作竊取的算法并行處理請求。
總結
這些線程都是通過工具類 Executors 來構建的,線程池的最終實現(xiàn)類是 ThreadPoolExecutor。