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

