線(xiàn)程池📣 📣 📣 📢📢📢
成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元青海做網(wǎng)站,已為上家服務(wù),為青海各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18982081108
????你好??!小伙伴,我是小冷。是一個(gè)興趣驅(qū)動(dòng)自學(xué)練習(xí)兩年半的的Java工程師。
📒 一位十分喜歡將知識(shí)分享出來(lái)的Java博主??????,擅長(zhǎng)使用Java技術(shù)開(kāi)發(fā)web項(xiàng)目和工具
📒 文章內(nèi)容豐富:覆蓋大部分java必學(xué)技術(shù)棧,前端,計(jì)算機(jī)基礎(chǔ),容器等方面的文章
📒 如果你也對(duì)Java感興趣,關(guān)注小冷吧,一起探索Java技術(shù)的生態(tài)與進(jìn)步,一起討論Java技術(shù)的使用與學(xué)習(xí)
??高質(zhì)量技術(shù)專(zhuān)欄專(zhuān)欄鏈接: 微服務(wù),數(shù)據(jù)結(jié)構(gòu),netty,單點(diǎn)登錄,SSM ,SpringCloudAlibaba等
😝公眾號(hào)😝 : 想全棧的小冷,分享一些技術(shù)上的文章,以及解決問(wèn)題的經(jīng)驗(yàn)
?當(dāng)前專(zhuān)欄:JUC系列
池化技術(shù)、
程序的運(yùn)行 本質(zhì): 占用系統(tǒng)的資源 ! 優(yōu)化資源的使用 =>池化技術(shù)
線(xiàn)程池,連接池,內(nèi)存吃,對(duì)象池, 頻繁的創(chuàng)建銷(xiāo)毀 十分的浪費(fèi)資源
線(xiàn)程池的好處:
線(xiàn)程的復(fù)用 可以控制大并發(fā)數(shù)量,管理線(xiàn)程
三大方法下圖來(lái)自 阿里巴巴開(kāi)發(fā)規(guī)約手冊(cè)
代碼實(shí)例
public class poolDemo {public static void main(String[] args) {//單個(gè)線(xiàn)程
ExecutorService Threadpool = Executors.newSingleThreadExecutor();
// 創(chuàng)建一個(gè)固定的線(xiàn)程池大小
//ExecutorService Threadpool = Executors.newFixedThreadPool(5);
//可以伸縮的 遇強(qiáng)則強(qiáng)
// ExecutorService Threadpool = Executors.newCachedThreadPool();
try {for (int i = 0; i< 10; i++) {Threadpool.execute(() ->{System.out.println(Thread.currentThread().getName() + "=>ok");
});
}
} catch (Exception e) {e.printStackTrace();
} finally {//線(xiàn)程池使用完畢 一定要關(guān)閉
Threadpool.shutdown();
}
}
}
三大方法的創(chuàng)建代碼
public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue()));
}
public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue());
}
public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue());
}
七大參數(shù)七大參數(shù)
public ThreadPoolExecutor(int corePoolSize, //核心線(xiàn)程池大小
int maximumPoolSize,// 大核心線(xiàn)程數(shù)大小
long keepAliveTime,// 超時(shí)了沒(méi)有人調(diào)用就會(huì)釋放
TimeUnit unit,// 超時(shí)單位
BlockingQueueworkQueue,// 阻塞隊(duì)列
ThreadFactory threadFactory, // 線(xiàn)程工廠(chǎng),創(chuàng)建線(xiàn)程的
RejectedExecutionHandler handler// 拒絕策略
)
這七個(gè)參數(shù)分別有什么作用呢,思路圖
手動(dòng)創(chuàng)建線(xiàn)程池,不用封裝好的方法,使用原生的線(xiàn)程池方法
ThreadPoolExecutor threadpool = new ThreadPoolExecutor(
2,
5,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
// 這個(gè)時(shí)候 舉例子,銀行的人滿(mǎn)了 這種方式就是 不處理 拋出異常
new ThreadPoolExecutor.AbortPolicy()
);
線(xiàn)程池四種拒絕策略new ThreadPoolExecutor.AbortPolicy() 銀行的人滿(mǎn)了 這種方式就是 不處理 拋出異常
執(zhí)行效果
new ThreadPoolExecutor.CallerRunsPolicy() 銀行人滿(mǎn)了,哪里來(lái)的去哪里,回到調(diào)用線(xiàn)程輸出,不會(huì)異常
執(zhí)行結(jié)果
new ThreadPoolExecutor.DiscardPolicy() 隊(duì)列滿(mǎn)了 就拋出全部任務(wù),
執(zhí)行結(jié)果
new ThreadPoolExecutor.DiscardOldestPolicy() 嘗試和最早的線(xiàn)程競(jìng)爭(zhēng) 查看是否有位置,沒(méi)有就拋出任務(wù)
執(zhí)行結(jié)果
代碼實(shí)例
public class poolDemo {public static void main(String[] args) {ThreadPoolExecutor threadpool = new ThreadPoolExecutor(
2,
5,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy()
);
//單個(gè)線(xiàn)程
//ExecutorService Threadpool = Executors.newSingleThreadExecutor();
// 創(chuàng)建一個(gè)固定的線(xiàn)程池大小
//ExecutorService Threadpool = Executors.newFixedThreadPool(5);
//可以伸縮的 遇強(qiáng)則強(qiáng)
// ExecutorService Threadpool = Executors.newCachedThreadPool();
try {//大承載如何計(jì)算 : 阻塞隊(duì)列+max數(shù)量
//超過(guò)的話(huà)就會(huì) 爆出異常 :RejectedExecutionException
for (int i = 1; i<= 15; i++) {threadpool.execute(() ->{System.out.println(Thread.currentThread().getName() + "=>ok");
});
}
} catch (Exception e) {e.printStackTrace();
} finally {//線(xiàn)程池使用完畢 一定要關(guān)閉
threadpool.shutdown();
}
}
}
大負(fù)載CPU密集型 有幾個(gè)核心就定義幾個(gè),可以保證效率最高
Runtime.getRuntime().availableProcessors() //獲取cpu 核心數(shù)
IO 密集型 判斷程序中 十分消耗IO資源的線(xiàn)程,如: 程序 有 15個(gè)大型任務(wù),io 十分占中資源,那么設(shè)定的比任務(wù)數(shù)量大 就可以保證一定性能、
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧