成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Java 線程池的作用以及該如何使用

瀏覽:94日期:2022-08-17 15:56:26

服務(wù)端應(yīng)用程序(如數(shù)據(jù)庫和 Web 服務(wù)器)需要處理來自客戶端的高并發(fā)、耗時(shí)較短的請求任務(wù),所以頻繁的創(chuàng)建處理這些請求的所需要的線程就是一個(gè)非常消耗資源的操作。常規(guī)的方法是針對(duì)一個(gè)新的請求創(chuàng)建一個(gè)新線程,雖然這種方法似乎易于實(shí)現(xiàn),但它有重大缺點(diǎn)。為每個(gè)請求創(chuàng)建新線程將花費(fèi)更多的時(shí)間,在創(chuàng)建和銷毀線程時(shí)花費(fèi)更多的系統(tǒng)資源。因此同時(shí)創(chuàng)建太多線程的 JVM 可能會(huì)導(dǎo)致系統(tǒng)內(nèi)存不足,這就需要限制要?jiǎng)?chuàng)建的線程數(shù),也就是需要使用到線程池。

一、什么是 Java 中的線程池?

線程池技術(shù)就是線程的重用技術(shù),使用之前創(chuàng)建好的線程來執(zhí)行當(dāng)前任務(wù),并提供了針對(duì)線程周期開銷和資源沖突問題的解決方案。 由于請求到達(dá)時(shí)線程已經(jīng)存在,因此消除了線程創(chuàng)建過程導(dǎo)致的延遲,使應(yīng)用程序得到更快的響應(yīng)。

Java提供了以Executor接口及其子接口ExecutorService和ThreadPoolExecutor為中心的執(zhí)行器框架。通過使用Executor,完成線程任務(wù)只需實(shí)現(xiàn) Runnable接口并將其交給執(zhí)行器執(zhí)行即可。 為您封裝好線程池,將您的編程任務(wù)側(cè)重于具體任務(wù)的實(shí)現(xiàn),而不是線程的實(shí)現(xiàn)機(jī)制。 若要使用線程池,我們首先創(chuàng)建一個(gè) ExecutorService對(duì)象,然后向其傳遞一組任務(wù)。ThreadPoolExcutor 類則可以設(shè)置線程池初始化和最大的線程容量。

Java 線程池的作用以及該如何使用

上圖表示線程池初始化具有3 個(gè)線程,任務(wù)隊(duì)列中有5 個(gè)待運(yùn)行的任務(wù)對(duì)象。

執(zhí)行器線程池方法

方法 描述 newFixedThreadPool(int) 創(chuàng)建具有固定的線程數(shù)的線程池,int參數(shù)表示線程池內(nèi)線程的數(shù)量 newCachedThreadPool() 創(chuàng)建一個(gè)可緩存線程池,該線程池可靈活回收空閑線程。若無空閑線程,則新建線程處理任務(wù)。 newSingleThreadExecutor() 創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來執(zhí)行任務(wù) newScheduledThreadPool 創(chuàng)建一個(gè)定長線程池,支持定時(shí)及周期性任務(wù)執(zhí)行

在固定線程池的情況下,如果執(zhí)行器當(dāng)前運(yùn)行的所有線程,則掛起的任務(wù)將放在隊(duì)列中,并在線程變?yōu)榭臻e時(shí)執(zhí)行。

二、線程池示例

在下面的內(nèi)容中,我們將介紹線程池的executor執(zhí)行器。

創(chuàng)建線程池處理任務(wù)要遵循的步驟 創(chuàng)建一個(gè)任務(wù)對(duì)象(實(shí)現(xiàn)Runnable接口),用于執(zhí)行具體的任務(wù)邏輯 使用Executors創(chuàng)建線程池ExecutorService 將待執(zhí)行的任務(wù)對(duì)象交給ExecutorService進(jìn)行任務(wù)處理 停掉 Executor 線程池

//第一步: 創(chuàng)建一個(gè)任務(wù)對(duì)象(實(shí)現(xiàn)Runnable接口),用于執(zhí)行具體的任務(wù)邏輯 (Step 1) class Task implements Runnable { private String name; public Task(String s) { name = s; } // 打印任務(wù)名稱并Sleep 1秒 // 整個(gè)處理流程執(zhí)行5次 public void run() { try{ for (int i = 0; i<=5; i++) {if (i==0) { Date d = new Date(); SimpleDateFormat ft = new SimpleDateFormat('hh:mm:ss'); System.out.println('任務(wù)初始化' + name +' = ' + ft.format(d)); //第一次執(zhí)行的時(shí)候,打印每一個(gè)任務(wù)的名稱及初始化的時(shí)間}else{ Date d = new Date(); SimpleDateFormat ft = new SimpleDateFormat('hh:mm:ss'); System.out.println('任務(wù)正在執(zhí)行' + name +' = ' + ft.format(d)); // 打印每一個(gè)任務(wù)處理的執(zhí)行時(shí)間}Thread.sleep(1000); } System.out.println('任務(wù)執(zhí)行完成' + name); } catch(InterruptedException e) { e.printStackTrace(); } }}

測試用例

public class ThreadPoolTest { // 線程池里面最大線程數(shù)量 static final int MAX_SIZE = 3; public static void main (String[] args) { // 創(chuàng)建5個(gè)任務(wù) Runnable r1 = new Task('task 1'); Runnable r2 = new Task('task 2'); Runnable r3 = new Task('task 3'); Runnable r4 = new Task('task 4'); Runnable r5 = new Task('task 5'); // 第二步:創(chuàng)建一個(gè)固定線程數(shù)量的線程池,線程數(shù)為MAX_SIZE ExecutorService pool = Executors.newFixedThreadPool(MAX_SIZE); // 第三步:將待執(zhí)行的任務(wù)對(duì)象交給ExecutorService進(jìn)行任務(wù)處理 pool.execute(r1); pool.execute(r2); pool.execute(r3); pool.execute(r4); pool.execute(r5); // 第四步:關(guān)閉線程池 pool.shutdown(); }} 示例執(zhí)行結(jié)果

任務(wù)初始化task 1 = 05:25:55任務(wù)初始化task 2 = 05:25:55任務(wù)初始化task 3 = 05:25:55任務(wù)正在執(zhí)行task 3 = 05:25:56任務(wù)正在執(zhí)行task 1 = 05:25:56任務(wù)正在執(zhí)行task 2 = 05:25:56任務(wù)正在執(zhí)行task 1 = 05:25:57任務(wù)正在執(zhí)行task 3 = 05:25:57任務(wù)正在執(zhí)行task 2 = 05:25:57任務(wù)正在執(zhí)行task 3 = 05:25:58任務(wù)正在執(zhí)行task 1 = 05:25:58任務(wù)正在執(zhí)行task 2 = 05:25:58任務(wù)正在執(zhí)行task 2 = 05:25:59任務(wù)正在執(zhí)行task 3 = 05:25:59任務(wù)正在執(zhí)行task 1 = 05:25:59任務(wù)正在執(zhí)行task 1 = 05:26:00任務(wù)正在執(zhí)行task 2 = 05:26:00任務(wù)正在執(zhí)行task 3 = 05:26:00任務(wù)執(zhí)行完成task 3任務(wù)執(zhí)行完成task 2任務(wù)執(zhí)行完成task 1任務(wù)初始化task 5 = 05:26:01任務(wù)初始化task 4 = 05:26:01任務(wù)正在執(zhí)行task 4 = 05:26:02任務(wù)正在執(zhí)行task 5 = 05:26:02任務(wù)正在執(zhí)行task 4 = 05:26:03任務(wù)正在執(zhí)行task 5 = 05:26:03任務(wù)正在執(zhí)行task 5 = 05:26:04任務(wù)正在執(zhí)行task 4 = 05:26:04任務(wù)正在執(zhí)行task 4 = 05:26:05任務(wù)正在執(zhí)行task 5 = 05:26:05任務(wù)正在執(zhí)行task 4 = 05:26:06任務(wù)正在執(zhí)行task 5 = 05:26:06任務(wù)執(zhí)行完成task 4任務(wù)執(zhí)行完成task 5

如程序執(zhí)行結(jié)果中顯示的一樣,任務(wù) 4 或任務(wù) 5 僅在池中的線程變?yōu)榭臻e時(shí)才執(zhí)行。在此之前,額外的任務(wù)將放在待執(zhí)行的隊(duì)列中。

Java 線程池的作用以及該如何使用

線程池執(zhí)行前三個(gè)任務(wù),線程池內(nèi)線程回收空出來之后再去處理執(zhí)行任務(wù) 4 和 5

Java 線程池的作用以及該如何使用

使用這種線程池方法的一個(gè)主要優(yōu)點(diǎn)是,假如您希望一次處理10000個(gè)請求,但不希望創(chuàng)建10000個(gè)線程,從而避免造成系統(tǒng)資源的過量使用導(dǎo)致的宕機(jī)。您可以使用此方法創(chuàng)建一個(gè)包含500個(gè)線程的線程池,并且可以向該線程池提交500個(gè)請求。ThreadPool此時(shí)將創(chuàng)建最多500個(gè)線程,一次處理500個(gè)請求。在任何一個(gè)線程的進(jìn)程完成之后,ThreadPool將在內(nèi)部將第501個(gè)請求分配給該線程,并將繼續(xù)對(duì)所有剩余的請求執(zhí)行相同的操作。在系統(tǒng)資源比較緊張的情況下,線程池是保證程序穩(wěn)定運(yùn)行的一個(gè)有效的解決方案。

三、使用線程池的注意事項(xiàng)與調(diào)優(yōu) 死鎖: 雖然死鎖可能發(fā)生在任何多線程程序中,但線程池引入了另一個(gè)死鎖案例,其中所有執(zhí)行線程都在等待隊(duì)列中某個(gè)阻塞線程的執(zhí)行結(jié)果,導(dǎo)致線程無法繼續(xù)執(zhí)行。 線程泄漏 : 如果線程池中線程在任務(wù)完成時(shí)未正確返回,將發(fā)生線程泄漏問題。例如,某個(gè)線程引發(fā)異常并且池類沒有捕獲此異常,則線程將異常退出,從而線程池的大小將減小一個(gè)。如果這種情況重復(fù)多次,則線程池最終將變?yōu)榭眨瑳]有線程可用于執(zhí)行其他任務(wù)。 線程頻繁輪換: 如果線程池大小非常大,則線程之間進(jìn)行上下文切換會(huì)浪費(fèi)很多時(shí)間。所以在系統(tǒng)資源允許的情況下,也不是線程池越大越好。

線程池大小優(yōu)化: 線程池的最佳大小取決于可用的處理器數(shù)量和待處理任務(wù)的性質(zhì)。對(duì)于CPU密集型任務(wù),假設(shè)系統(tǒng)有N個(gè)邏輯處理核心,N 或 N+1 的最大線程池?cái)?shù)量大小將實(shí)現(xiàn)最大效率。對(duì)于 I/O密集型任務(wù),需要考慮請求的等待時(shí)間(W)和服務(wù)處理時(shí)間(S)的比例,線程池最大大小為 N*(1+ W/S)會(huì)實(shí)現(xiàn)最高效率。

不要教條的使用上面的總結(jié),需要根據(jù)自己的應(yīng)用任務(wù)處理類型進(jìn)行靈活的設(shè)置與調(diào)優(yōu),其中少不了測試實(shí)驗(yàn)。

原文鏈接:字母哥博客。

以上就是Java 線程池的作用以及該如何使用的詳細(xì)內(nèi)容,更多關(guān)于Java 線程池的作用和使用的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲精品一区二区三区四区高清 | 久久99精品国产麻豆不卡| 欧美片网站免费| 欧美不卡在线视频| 成人性生交大片免费看在线播放| 色一情一伦一子一伦一区| 午夜精品久久久久久久| 亚洲综合日本| 性久久久久久久| 久久看片网站| 日韩av在线免费观看不卡| 麻豆成人在线| 午夜不卡av免费| 色综合久久99| 麻豆91精品视频| 在线观看av一区二区| 麻豆成人91精品二区三区| 欧美午夜视频网站| 激情综合一区二区三区| 欧美日本国产一区| 国模一区二区三区白浆| 欧美精品欧美精品系列| 精品一区二区免费视频| 欧美精品黑人性xxxx| 国产乱人伦精品一区二区在线观看| 欧美另类高清zo欧美| 丁香婷婷综合色啪| 久久嫩草精品久久久精品一| 午夜性色一区二区三区免费视频| 自拍偷拍国产精品| 欧美一区二区三区另类| 国产精品高潮呻吟| 亚洲欧美久久久久一区二区三区| 日韩精品每日更新| 欧美日产在线观看| 成人app软件下载大全免费| 久久九九国产精品| 亚洲三级毛片| 欧美a级一区二区| 欧美一区二区免费| 欧美国产日本| 亚洲综合色视频| 欧美曰成人黄网| 成人性色生活片| 国产精品理论片| 欧美主播一区二区三区美女 久久精品人| 日韩电影一区二区三区| 制服丝袜亚洲色图| 女女同性精品视频| 一区二区欧美精品| 日本道免费精品一区二区三区| 国产一区二区三区高清播放| 久久久综合精品| 亚洲视频www| 激情久久久久久久久久久久久久久久| 精品理论电影在线观看| 亚洲黄网站黄| 久久99精品一区二区三区| 精品国产1区2区3区| 亚洲日本无吗高清不卡| 日本不卡的三区四区五区| 日韩区在线观看| 黄色精品免费| 奇米777欧美一区二区| 欧美精品一区二区三区四区| 亚洲国产国产亚洲一二三| 麻豆国产欧美日韩综合精品二区| 久久久国产精品不卡| 国产精品久久久一区二区| 韩国毛片一区二区三区| 欧美高清在线一区| 久久亚洲二区| 成人精品国产一区二区4080| 亚洲免费在线看| 欧美曰成人黄网| 91网站最新网址| 亚洲午夜久久久久中文字幕久| 在线电影欧美成精品| 成人免费视频网站在线观看| 亚洲女女做受ⅹxx高潮| 欧美日韩国产一区| 国产主播一区| 久久99精品一区二区三区| 国产蜜臀av在线一区二区三区| 久久精品官网| 91色porny蝌蚪| 蜜臀久久久久久久| 亚洲国产成人一区二区三区| 色视频一区二区| 欧美一区二区三区四区夜夜大片| 视频一区国产视频| 国产网红主播福利一区二区| 在线一区二区观看| 国产精品xnxxcom| 久草热8精品视频在线观看| 日本一区二区三级电影在线观看 | 免费精品视频| av中文字幕不卡| 午夜一区二区三区在线观看| 欧美精品一区二区三区高清aⅴ| 亚洲一区二区三区免费在线观看| caoporm超碰国产精品| 日日摸夜夜添夜夜添国产精品| 久久综合九色综合97_久久久| 色吊一区二区三区| 欧美日韩精品综合| 精品一区二区三区香蕉蜜桃| 亚洲三级在线观看| 日韩久久免费av| 久久av免费一区| 欧美日韩日本国产亚洲在线| 国内成+人亚洲+欧美+综合在线| 一区二区三区在线视频免费观看| 精品久久久影院| 在线观看av一区| 一区二区三区四区五区精品视频| 97se亚洲国产综合自在线| 久久国产精品99精品国产| 一区二区三区高清在线| 久久精品视频一区二区三区| 欧美午夜不卡在线观看免费| 国产伦精品一区二区三区四区免费 | 久久亚洲二区三区| 欧美日韩一区二区三区高清| 国产日韩欧美一区二区三区在线观看| 色综合久久中文字幕综合网 | 免费在线观看一区| 亚洲免费色视频| 久久综合五月天婷婷伊人| 在线亚洲一区观看| 在线亚洲激情| 欧美理论在线| www.亚洲色图.com| 激情欧美日韩一区二区| 性欧美疯狂xxxxbbbb| 中文字幕一区av| 久久夜色精品国产欧美乱极品| 91精品国产一区二区三区香蕉| 日本精品视频一区二区三区| 国产欧美日韩视频一区二区三区| 欧美婷婷久久| 91美女精品福利| 粉嫩av一区二区三区粉嫩| 久久不见久久见免费视频1| 午夜欧美一区二区三区在线播放| 亚洲情趣在线观看| 国产欧美日韩在线| 精品少妇一区二区| 91精品国产综合久久久久久漫画| 在线精品视频免费观看| 免费在线成人av| 一本色道久久| 伊人久久综合| 国产在线一区二区三区四区| 欧美日韩一区二区三区在线观看免| 成人福利在线看| 国产成人免费视频网站| 久久国产乱子精品免费女| 日韩av电影免费观看高清完整版 | 亚洲午夜久久久久久久久电影院| 亚洲乱码国产乱码精品精小说| 欧美激情综合在线| 欧美变态凌虐bdsm| 欧美伦理电影网| 欧美精品丝袜中出| 91精品国产丝袜白色高跟鞋| 91麻豆精品国产自产在线观看一区 | 久久久久国产一区二区| 亚洲欧美日韩精品久久久| 国产亚洲福利| aa日韩免费精品视频一| 99精品国产在热久久婷婷| 在线 亚洲欧美在线综合一区| 国产综合久久| 欧美日韩一区二区视频在线观看| 欧美日本国产精品| 午夜电影亚洲| 亚洲激精日韩激精欧美精品| 国产精品一卡| 色琪琪一区二区三区亚洲区| 在线精品视频免费播放| 欧美日韩精品欧美日韩精品一 | 日本精品一级二级| 欧美制服丝袜第一页| 欧美人体做爰大胆视频| 在线播放国产精品二区一二区四区 | 亚洲综合色丁香婷婷六月图片| 一卡二卡三卡日韩欧美| 亚洲狠狠爱一区二区三区| 五月综合激情日本mⅴ| 美女网站视频久久| 国产夫妻精品视频| 99久久99久久久精品齐齐| 欧美精品九九| 国内精品福利| 一区二区日韩免费看| 久久夜色精品| 6080亚洲精品一区二区| 久久久久久免费毛片精品| 自拍视频在线观看一区二区|