日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

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

服務端應用程序(如數據庫和 Web 服務器)需要處理來自客戶端的高并發、耗時較短的請求任務,所以頻繁的創建處理這些請求的所需要的線程就是一個非常消耗資源的操作。常規的方法是針對一個新的請求創建一個新線程,雖然這種方法似乎易于實現,但它有重大缺點。為每個請求創建新線程將花費更多的時間,在創建和銷毀線程時花費更多的系統資源。因此同時創建太多線程的 JVM 可能會導致系統內存不足,這就需要限制要創建的線程數,也就是需要使用到線程池。

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

線程池技術就是線程的重用技術,使用之前創建好的線程來執行當前任務,并提供了針對線程周期開銷和資源沖突問題的解決方案。 由于請求到達時線程已經存在,因此消除了線程創建過程導致的延遲,使應用程序得到更快的響應。

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

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

上圖表示線程池初始化具有3 個線程,任務隊列中有5 個待運行的任務對象。

執行器線程池方法

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

在固定線程池的情況下,如果執行器當前運行的所有線程,則掛起的任務將放在隊列中,并在線程變為空閑時執行。

二、線程池示例

在下面的內容中,我們將介紹線程池的executor執行器。

創建線程池處理任務要遵循的步驟 創建一個任務對象(實現Runnable接口),用于執行具體的任務邏輯 使用Executors創建線程池ExecutorService 將待執行的任務對象交給ExecutorService進行任務處理 停掉 Executor 線程池

//第一步: 創建一個任務對象(實現Runnable接口),用于執行具體的任務邏輯 (Step 1) class Task implements Runnable { private String name; public Task(String s) { name = s; } // 打印任務名稱并Sleep 1秒 // 整個處理流程執行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('任務初始化' + name +' = ' + ft.format(d)); //第一次執行的時候,打印每一個任務的名稱及初始化的時間}else{ Date d = new Date(); SimpleDateFormat ft = new SimpleDateFormat('hh:mm:ss'); System.out.println('任務正在執行' + name +' = ' + ft.format(d)); // 打印每一個任務處理的執行時間}Thread.sleep(1000); } System.out.println('任務執行完成' + name); } catch(InterruptedException e) { e.printStackTrace(); } }}

測試用例

public class ThreadPoolTest { // 線程池里面最大線程數量 static final int MAX_SIZE = 3; public static void main (String[] args) { // 創建5個任務 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'); // 第二步:創建一個固定線程數量的線程池,線程數為MAX_SIZE ExecutorService pool = Executors.newFixedThreadPool(MAX_SIZE); // 第三步:將待執行的任務對象交給ExecutorService進行任務處理 pool.execute(r1); pool.execute(r2); pool.execute(r3); pool.execute(r4); pool.execute(r5); // 第四步:關閉線程池 pool.shutdown(); }} 示例執行結果

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

如程序執行結果中顯示的一樣,任務 4 或任務 5 僅在池中的線程變為空閑時才執行。在此之前,額外的任務將放在待執行的隊列中。

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

線程池執行前三個任務,線程池內線程回收空出來之后再去處理執行任務 4 和 5

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

使用這種線程池方法的一個主要優點是,假如您希望一次處理10000個請求,但不希望創建10000個線程,從而避免造成系統資源的過量使用導致的宕機。您可以使用此方法創建一個包含500個線程的線程池,并且可以向該線程池提交500個請求。ThreadPool此時將創建最多500個線程,一次處理500個請求。在任何一個線程的進程完成之后,ThreadPool將在內部將第501個請求分配給該線程,并將繼續對所有剩余的請求執行相同的操作。在系統資源比較緊張的情況下,線程池是保證程序穩定運行的一個有效的解決方案。

三、使用線程池的注意事項與調優 死鎖: 雖然死鎖可能發生在任何多線程程序中,但線程池引入了另一個死鎖案例,其中所有執行線程都在等待隊列中某個阻塞線程的執行結果,導致線程無法繼續執行。 線程泄漏 : 如果線程池中線程在任務完成時未正確返回,將發生線程泄漏問題。例如,某個線程引發異常并且池類沒有捕獲此異常,則線程將異常退出,從而線程池的大小將減小一個。如果這種情況重復多次,則線程池最終將變為空,沒有線程可用于執行其他任務。 線程頻繁輪換: 如果線程池大小非常大,則線程之間進行上下文切換會浪費很多時間。所以在系統資源允許的情況下,也不是線程池越大越好。

線程池大小優化: 線程池的最佳大小取決于可用的處理器數量和待處理任務的性質。對于CPU密集型任務,假設系統有N個邏輯處理核心,N 或 N+1 的最大線程池數量大小將實現最大效率。對于 I/O密集型任務,需要考慮請求的等待時間(W)和服務處理時間(S)的比例,線程池最大大小為 N*(1+ W/S)會實現最高效率。

不要教條的使用上面的總結,需要根據自己的應用任務處理類型進行靈活的設置與調優,其中少不了測試實驗。

原文鏈接:字母哥博客。

以上就是Java 線程池的作用以及該如何使用的詳細內容,更多關于Java 線程池的作用和使用的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产一区二| 亚洲日本久久| 国产日韩三级| 久久精品凹凸全集| 国产日韩在线观看视频| 国产日韩视频在线| 久久国产精品美女| 精品一区二区三区四区五区| 日韩国产成人精品| 国产精品一站二站| 精品国产a一区二区三区v免费| 麻豆视频一区二区| 国产一区二区三区国产精品 | 成人自拍av| 偷拍精品精品一区二区三区| 成人av二区| 亚洲精选成人| 国产香蕉精品| 97人人精品| 亚洲女同一区| 日本不卡高清视频| 国产精品入口久久| 四季av一区二区凹凸精品| 亚洲va中文在线播放免费| 激情综合在线| 综合色就爱涩涩涩综合婷婷| 欧美亚洲网站| 亚洲精品88| 丝瓜av网站精品一区二区| 日本99精品| 色偷偷色偷偷色偷偷在线视频| 欧美va天堂| 日韩国产在线一| 国产色播av在线| 亚洲综合电影一区二区三区| 欧美亚洲自偷自偷| 久久久精品午夜少妇| 午夜久久美女| 国产欧美日本| 99久久亚洲精品| 日本中文字幕不卡| 国产传媒在线| 亚洲精品一二| 成人片免费看| 亚洲精品免费观看| 成人一区而且| 亚洲我射av| a天堂资源在线| 日本亚洲欧洲无免费码在线| 高清一区二区三区av| 国产精品人人爽人人做我的可爱| 欧美欧美黄在线二区| 激情综合五月| 视频一区视频二区中文字幕| 国产精品久久久免费| 91九色精品国产一区二区| 国产亚洲精品美女久久 | 91九色综合| 亚洲二区在线| 国产精品色在线网站| 欧美另类专区| 久久这里只有精品一区二区| 日韩一级不卡| 国产精品v日韩精品v欧美精品网站| 欧洲亚洲一区二区三区| 日本精品另类| 狠狠操综合网| 欧美黑人做爰爽爽爽| 国产二区精品| 国产日韩欧美| 亚洲综合电影一区二区三区| 国产成人久久精品一区二区三区| 美女久久网站| 日韩大片免费观看| 日韩精品社区| 亚洲精品97| 福利一区二区三区视频在线观看| 中文在线日韩| 欧美综合另类| 精品国产网站| 日韩毛片网站| 亚洲男女自偷自拍| 日韩中文影院| 久久精品国产在热久久| 日韩在线视频一区二区三区| 国产综合欧美| 在线手机中文字幕| 国产精品巨作av| 亚洲九九精品| 午夜欧美精品| 久久国产免费| 成人一二三区| 久久男人av| 欧美日韩在线精品一区二区三区激情综合| 91精品国产乱码久久久久久久| 久久精品女人| 国产日产一区| 日本欧美一区| 日韩在线黄色| 亚洲精品在线a| 免费人成在线不卡| 99在线精品免费视频九九视| 欧美亚洲在线日韩| 人在线成免费视频| 国产一区调教| 精品一区二区三区视频在线播放| 国产日本久久| 欧美日韩视频免费看| 日韩视频1区| 日韩在线a电影| 美女久久一区| 首页国产欧美日韩丝袜| 免费成人性网站| 蘑菇福利视频一区播放| 亚洲精品1区| 99热精品在线观看| 99国产精品久久久久久久| 午夜久久美女| 午夜在线视频观看日韩17c| 欧美日韩四区| 亚洲视频播放| 每日更新成人在线视频| 久久国产精品毛片| 中文字幕一区二区精品区| 性色av一区二区怡红| 日韩影院免费视频| 婷婷视频一区二区三区| 少妇精品久久久| 日韩激情一二三区| 国产精一区二区| 久久精品国产网站| 成人三级高清视频在线看| www.com.cn成人| 欧美丝袜一区| 香蕉久久夜色精品国产| 在线观看一区| 久久精品99久久久| 欧美精品1区| 亚洲啊v在线| 婷婷国产精品| 亚洲图片久久| 国产欧美日韩视频在线| 国精品产品一区| 国产一区久久| 日韩久久一区| 成人午夜在线| 亚洲激情中文在线| 五月激激激综合网色播| 国产精品久久久网站| 中文字幕在线高清| 久久久久中文| 视频一区在线视频| 国产精选久久| 四虎4545www国产精品| 欧美va天堂在线| 日本伊人午夜精品| 国产成人久久精品一区二区三区| 久久亚洲国产| 亚洲精品中文字幕99999| 国产精品分类| 秋霞影院一区二区三区| 国产精品美女久久久浪潮软件| 午夜视频一区二区在线观看| 久久97视频| 好看不卡的中文字幕| 日韩精品免费一区二区夜夜嗨 | 国产精品一区二区三区www| 日本欧美国产| 国产精品色网| 国产免费久久| 少妇精品导航| 亚洲3区在线| www在线观看黄色| 免费日韩一区二区| 久久精品一区二区国产| 性欧美69xoxoxoxo| 青青青国产精品| 91一区二区三区四区| 亚洲在线网站| 国产在线日韩精品| 日韩中文字幕91| 黄在线观看免费网站ktv| 亚洲综合专区| 亚洲黄色免费看| 亚洲a级精品| 久久精品动漫| 国产亚洲一区二区三区啪| 香蕉久久99| 国产精品久久久久9999高清| 亚洲性视频h| 国产精品色在线网站| 午夜欧美视频| 久久影院资源站| 亚洲一区二区三区免费在线观看| 美女视频免费精品| 美女国产一区| 日本久久成人网| 欧美三区不卡| 日韩亚洲精品在线| 91欧美日韩|