Java手動創(chuàng)建線程池代碼實例
Java手動創(chuàng)建線程池代碼實例
使用ExecutorServices直接創(chuàng)建線程池的缺點:
1. FixedThreadPool或者SingleThreadPool
允許的請求隊列長度為Integer.MAX_VALUE,可能會堆積大量的請求,從而導致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,可能會創(chuàng)建大量的線程,從而導致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)建線程時的線程名稱的命名規(guī)律
ThreadFactory nameThreadFactory = new ThreadFactoryBuilder().setNameFormat(“demo-pool-%d”).build();
2. 創(chuàng)建線程池 線程池在創(chuàng)建時可以不人為指定線程工廠,默認使用的是DefaultThreadFactory
/** * 各參數(shù)含義 * corePoolSize : 線程池中常駐的線程數(shù)量。核心線程數(shù),默認情況下核心線程會一直存活,即使處于閑置狀態(tài)也不會 * 受存活時間 keepAliveTime 的限制,除非將 allowCoreThreadTimeOut 設置為 true。 * maximumPoolSize : 線程池所能容納的最大線程數(shù)。超過這個數(shù)的線程將被阻塞。當任務隊列為沒有設置大小的 * LinkedBlockingQueue時,這個值無效。 * keepAliveTime : 當線程數(shù)量多于 corePoolSize 時,空閑線程的存活時長,超過這個時間就會被回收 * unit : keepAliveTime 的時間單位 * workQueue : 存放待處理任務的隊列 * threadFactory : 線程工廠 * handler : 拒絕策略,拒絕無法接收添加的任務 */
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());
到此這篇關于Java手動創(chuàng)建線程池代碼實例的文章就介紹到這了,更多相關Java線程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實戰(zhàn)之兼職平臺系統(tǒng)的實現(xiàn)
這篇文章主要介紹了如何利用Java編寫一個兼職平臺系統(tǒng),采用到的技術有Springboot、SpringMVC、MyBatis、ThymeLeaf等,感興趣的小伙伴可以了解一下2022-03-03新版本IntelliJ IDEA 構建maven,并用Maven創(chuàng)建一個web項目(圖文教程)
這篇文章主要介紹了新版本IntelliJ IDEA 構建maven,并用Maven創(chuàng)建一個web項目的圖文教程,需要的朋友可以參考下2018-01-01Spring Boot Actuator監(jiān)控的簡單使用方法示例代碼詳解
這篇文章主要介紹了Spring Boot Actuator監(jiān)控的簡單使用,本文通過實例代碼圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06