Java手動(dòng)創(chuàng)建線程池代碼實(shí)例
Java手動(dòng)創(chuàng)建線程池代碼實(shí)例
使用ExecutorServices直接創(chuàng)建線程池的缺點(diǎn):
1. FixedThreadPool或者SingleThreadPool
允許的請(qǐng)求隊(duì)列長(zhǎng)度為Integer.MAX_VALUE,可能會(huì)堆積大量的請(qǐng)求,從而導(dǎo)致OOM。
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}2.CachedThreadPool
允許的創(chuàng)建線程數(shù)量為Integer.MAX_VALUE,可能會(huì)創(chuàng)建大量的線程,從而導(dǎo)致OOM。
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}生產(chǎn)環(huán)境的做法
1. 創(chuàng)建線程工廠,指定創(chuàng)建線程時(shí)的線程名稱的命名規(guī)律
ThreadFactory nameThreadFactory = new ThreadFactoryBuilder().setNameFormat(“demo-pool-%d”).build();
2. 創(chuàng)建線程池 線程池在創(chuàng)建時(shí)可以不人為指定線程工廠,默認(rèn)使用的是DefaultThreadFactory
/** * 各參數(shù)含義 * corePoolSize : 線程池中常駐的線程數(shù)量。核心線程數(shù),默認(rèn)情況下核心線程會(huì)一直存活,即使處于閑置狀態(tài)也不會(huì) * 受存活時(shí)間 keepAliveTime 的限制,除非將 allowCoreThreadTimeOut 設(shè)置為 true。 * maximumPoolSize : 線程池所能容納的最大線程數(shù)。超過(guò)這個(gè)數(shù)的線程將被阻塞。當(dāng)任務(wù)隊(duì)列為沒(méi)有設(shè)置大小的 * LinkedBlockingQueue時(shí),這個(gè)值無(wú)效。 * keepAliveTime : 當(dāng)線程數(shù)量多于 corePoolSize 時(shí),空閑線程的存活時(shí)長(zhǎng),超過(guò)這個(gè)時(shí)間就會(huì)被回收 * unit : keepAliveTime 的時(shí)間單位 * workQueue : 存放待處理任務(wù)的隊(duì)列 * threadFactory : 線程工廠 * handler : 拒絕策略,拒絕無(wú)法接收添加的任務(wù) */
ExecutorService pool1 = new ThreadPoolExecutor( 5, 200, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024));
也可以人為的指定線程工廠
ExecutorService pool2 = new ThreadPoolExecutor( 5, 200 ,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
到此這篇關(guān)于Java手動(dòng)創(chuàng)建線程池代碼實(shí)例的文章就介紹到這了,更多相關(guān)Java線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分析
這篇文章主要介紹了java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Idea創(chuàng)建Jsp項(xiàng)目完整版教程
一直在使用eclipse,對(duì)idea嗤之以鼻,前些日子換成了idea以后覺(jué)得太香了,這篇文章主要給大家介紹了關(guān)于Idea創(chuàng)建Jsp項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-04-04
Java實(shí)戰(zhàn)之兼職平臺(tái)系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java編寫(xiě)一個(gè)兼職平臺(tái)系統(tǒng),采用到的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf等,感興趣的小伙伴可以了解一下2022-03-03
新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個(gè)web項(xiàng)目(圖文教程)
這篇文章主要介紹了新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個(gè)web項(xiàng)目的圖文教程,需要的朋友可以參考下2018-01-01
Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用方法示例代碼詳解
這篇文章主要介紹了Spring Boot Actuator監(jiān)控的簡(jiǎn)單使用,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06

