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