java Executors工具類(lèi)的相關(guān)方法使用創(chuàng)建
通過(guò)Executors類(lèi)創(chuàng)建線(xiàn)程池
線(xiàn)程池的創(chuàng)建方式有很多種,可以通過(guò)Executors工具類(lèi)創(chuàng)建多種模式的線(xiàn)程池,Executors工具類(lèi)位于java.util.concurrent.locks包中,接下來(lái)解釋其中的方法。
首先將線(xiàn)程池的七個(gè)參數(shù)標(biāo)在這里: corePoolSize:表示線(xiàn)程池中核心線(xiàn)程的數(shù)量;
maximumPoolSize:表示線(xiàn)程池中最大線(xiàn)程數(shù)量;
keepAliveTime:針對(duì)救急線(xiàn)程的存活時(shí)間的變量,就是當(dāng)線(xiàn)程數(shù)量超過(guò)線(xiàn)程池中的核心數(shù)量時(shí),如果沒(méi)有新的任務(wù)被提交,那么核心線(xiàn)程外的救急線(xiàn)程就會(huì)保持在keepAliveTime變量值之后被銷(xiāo)毀,而不是立即銷(xiāo)毀;
unit:也是針對(duì)救急線(xiàn)程,表示keepAliveTime的核心單位;
workQueue:表示線(xiàn)程池中的阻塞隊(duì)列,阻塞隊(duì)列中存儲(chǔ)著等待執(zhí)行的任務(wù);
threadFactory:表示用來(lái)創(chuàng)建線(xiàn)程的線(xiàn)程工廠(chǎng)。創(chuàng)建線(xiàn)程池的時(shí)候,默認(rèn)的線(xiàn)程工廠(chǎng)創(chuàng)建的線(xiàn)程具有相同的優(yōu)先級(jí),可以為線(xiàn)程起一個(gè)好名字;
handler:表示線(xiàn)程池的拒絕策略。當(dāng)線(xiàn)程池中的阻塞隊(duì)列滿(mǎn)了的時(shí)候,線(xiàn)程數(shù)maximumPoolSize也達(dá)到了最大值,如果此時(shí)再有任務(wù)提交到線(xiàn)程池,線(xiàn)程池就會(huì)采取策略來(lái)拒絕任務(wù)的執(zhí)行。
??newCachedThreadPool方法
調(diào)用Executors工具類(lèi)的newCachedThreadPool方法可以創(chuàng)建一個(gè)可緩存的線(xiàn)程池,核心線(xiàn)程數(shù)為0,當(dāng)線(xiàn)程池中的線(xiàn)程數(shù)量超過(guò)了運(yùn)行任務(wù)所需要的線(xiàn)程數(shù),那么可以回收空閑的線(xiàn)程,默認(rèn)每60s回收;同時(shí)當(dāng)任務(wù)增加的時(shí)候,線(xiàn)程池又可以創(chuàng)建新的線(xiàn)程來(lái)處理任務(wù)。
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
threadFactory);
}
??newFixThreadPool方法
調(diào)用Executors工具類(lèi)的newFixThreadPool方法可以創(chuàng)建一個(gè)固定長(zhǎng)度大小的線(xiàn)程池,線(xiàn)程池中的線(xiàn)程都是核心線(xiàn)程,也就是創(chuàng)建的線(xiàn)程池中的線(xiàn)程數(shù)量是固定的,能夠控制線(xiàn)程池的最大并發(fā)數(shù)。
當(dāng)向線(xiàn)程池提交任務(wù)時(shí),如果線(xiàn)程池中有空閑的線(xiàn)程則會(huì)直接執(zhí)行任務(wù),如果沒(méi)有空閑線(xiàn)程則會(huì)將任務(wù)放入阻塞隊(duì)列中等待,有空閑線(xiàn)程的時(shí)候再去執(zhí)行阻塞隊(duì)列中的線(xiàn)程。
當(dāng)線(xiàn)程池達(dá)到最大線(xiàn)程數(shù)時(shí),線(xiàn)程數(shù)量會(huì)保持不變,一旦某個(gè)線(xiàn)程出現(xiàn)異常,線(xiàn)程池會(huì)補(bǔ)充一個(gè)線(xiàn)程。提交到線(xiàn)程池的任務(wù)過(guò)多可能會(huì)導(dǎo)致內(nèi)存溢出。
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory);
}
??newScheduledThreadPool方法
調(diào)用Executors工具類(lèi)的newScheduledThreadPool方法可以創(chuàng)建一個(gè)可以周期性執(zhí)行任務(wù)的線(xiàn)程池,也能夠定時(shí)執(zhí)行任務(wù)。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}
public static ScheduledExecutorService newScheduledThreadPool(
int corePoolSize, ThreadFactory threadFactory) {
return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
}
??newSingleThreadExecutor方法
調(diào)用Executors工具類(lèi)的newSingleThreadExecutor方法可以創(chuàng)建只有一個(gè)工作線(xiàn)程的線(xiàn)程池,相當(dāng)于只有一個(gè)線(xiàn)程在工作。能夠保證任務(wù)按照先進(jìn)先出的順序,或者優(yōu)先級(jí)順序執(zhí)行任務(wù)。就像單線(xiàn)程在串行執(zhí)行任務(wù)一樣,但是也有些區(qū)別,如果這個(gè)唯一的線(xiàn)程出現(xiàn)了異常,線(xiàn)程池會(huì)創(chuàng)建一個(gè)新的線(xiàn)程來(lái)代替它。
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory));
}
??newSingleThreadScheduledExecutor方法
調(diào)用Executors工具類(lèi)的newSingleThreadScheduledExecutor方法可以創(chuàng)建只有一個(gè)工作線(xiàn)程,并且支持定時(shí),周期性執(zhí)行任務(wù)的線(xiàn)程池。
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {
return new DelegatedScheduledExecutorService
(new ScheduledThreadPoolExecutor(1, threadFactory));
}
??newWorkStealingPool方法
調(diào)用Executors工具類(lèi)的newSingleThreadExecutor方法可以創(chuàng)建一個(gè)具有并行級(jí)別的線(xiàn)程池,這是jdk 1.8新增的方法,可以為線(xiàn)程池設(shè)置并行級(jí)別,通過(guò)使用多個(gè)隊(duì)列來(lái)減少競(jìng)爭(zhēng),需要傳遞一個(gè)并行級(jí)別的參數(shù)。
public static ExecutorService newWorkStealingPool(int parallelism) {
return new ForkJoinPool
(parallelism,
ForkJoinPool.defaultForkJoinWorkerThreadFactory,
null, true);
}以上就是java Executors工具類(lèi)的相關(guān)方法使用創(chuàng)建的詳細(xì)內(nèi)容,更多關(guān)于java Executors工具類(lèi)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解SpringBoot同時(shí)可以處理多少請(qǐng)求
在日常操作中,相信很多人在SpringBoot能同時(shí)處理多少請(qǐng)求問(wèn)題上存在疑惑,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2024-06-06
java非公平鎖知識(shí)點(diǎn)實(shí)例詳解
在本篇文章里小編給大家整理了一篇關(guān)于java非公平鎖知識(shí)點(diǎn)實(shí)例詳解,有興趣的朋友們可以學(xué)習(xí)參考下。2021-10-10
springmvc中下載中文文件名稱(chēng)為下劃線(xiàn)的解決方案
這篇文章主要介紹了springmvc中下載中文文件名稱(chēng)為下劃線(xiàn)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Netty分布式高性能工具類(lèi)異線(xiàn)程下回收對(duì)象解析
這篇文章主要介紹了Netty分布式高性能工具類(lèi)異線(xiàn)程下回收對(duì)象解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
JAVA線(xiàn)程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解
這篇文章主要為大家介紹了JAVA線(xiàn)程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringBoot使用thymeleaf實(shí)現(xiàn)一個(gè)前端表格方法詳解
Thymeleaf是一個(gè)現(xiàn)代的服務(wù)器端 Java 模板引擎,適用于 Web 和獨(dú)立環(huán)境。Thymeleaf 的主要目標(biāo)是為您的開(kāi)發(fā)工作流程帶來(lái)優(yōu)雅的自然模板,本文就來(lái)用它實(shí)現(xiàn)一個(gè)前端表格,感興趣的可以了解一下2022-10-10

