成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 5線程池使用

開發 后端
線程池為線程生命周期開銷問題和資源不足問題提供了解決方案。通過對多個任務重用線程,線程創建的開銷被分攤到了多個任務上。其好處是,因為在請求到達時線程已經存在,所以無意中也消除了線程創建所帶來的延遲。

線程池是Java5提供的一個新技術,方便我們快速簡潔的定義線程池。包括如下:

諸如 Web 服務器、數據庫服務器、文件服務器或郵件服務器之類的許多服務器應用程序都面向處理來自某些遠程來源的大量短小的任務。請求以某種方式到達服務器,這種方式可能是通過網絡協議(例如 HTTP、FTP 或 POP)、通過 JMS 隊列或者可能通過輪詢數據庫。不管請求如何到達,服務器應用程序中經常出現的情況是:單個任務處理的時間很短而請求的數目卻是巨大的。

構建服務器應用程序的一個過于簡單的模型應該是:每當一個請求到達就創建一個新線程,然后在新線程中為請求服務。實際上,對于原型開發這種方法工作得很好,但如果試圖部署以這種方式運行的服務器應用程序,那么這種方法的嚴重不足就很明顯。每個請求對應一個線程(thread-per-request)方法的不足之一是:為每個請求創建一個新線程的開銷很大;為每個請求創建新線程的服務器在創建和銷毀線程上花費的時間和消耗的系統資源要比花在處理實際的用戶請求的時間和資源更多。

除了創建和銷毀線程的開銷之外,活動的線程也消耗系統資源。在一個 JVM 里創建太多的線程可能會導致系統由于過度消耗內存而用完內存或“切換過度”。為了防止資源不足,服務器應用程序需要一些辦法來限制任何給定時刻處理的請求數目。

線程池為線程生命周期開銷問題和資源不足問題提供了解決方案。通過對多個任務重用線程,線程創建的開銷被分攤到了多個任務上。其好處是,因為在請求到達時線程已經存在,所以無意中也消除了線程創建所帶來的延遲。這樣,就可以立即為請求服務,使應用程序響應更快。而且,通過適當地調整線程池中的線程數目,也就是當請求的數目超過某個閾值時,就強制其它任何新到的請求一直等待,直到獲得一個線程來處理為止,從而可以防止資源不足。

Java5提供以下線程池:

緩存線程池(newCachedThreadPool),可以創建任意個線程,每個任務過來后都會創建一個線程,用于任務少,或執行時間短的任務,例如我們創建十個任務,那么緩沖線程池將會創建十個線程來執行。如下代碼:

  1. ExecutorService threadPool = Executors.newCachedThreadPool();  
  2.           
  3.         for(int i=1; i<=10; i++){  
  4.             final int taskId = i;  
  5.             threadPool.execute(new Runnable(){  
  6.       
  7.                 public void run() {  
  8.                     for(int i=1; i<=10; i++){  
  9.                         System.out.println(Thread.currentThread().getName() + " is looping of " + i + " the task is " + taskId);  
  10.                         try {  
  11.                             Thread.sleep(20);  
  12.                         } catch (InterruptedException e) {  
  13.                             // TODO Auto-generated catch block  
  14.                             e.printStackTrace();  
  15.                         }  
  16.                           
  17.                     }  
  18.                 }  
  19.                   
  20.             });  
  21.         }  
  22.         System.out.println("add  all of 10 task");  
  23.         threadPool.shutdown(); 

固定數量線程池(newFixedThreadPool)允許我們創建固定線程數量的線程池,如果任務數大于線程池中線程的數量,那么任務將等待,如下代碼:

  1. ExecutorService threadPool = Executors.newFixedThreadPool(3);         
  2. for(int i=1; i<=10; i++){  
  3.     final int taskId = i;  
  4.     threadPool.execute(new Runnable(){  
  5.  
  6.         public void run() {  
  7.             for(int i=1; i<=10; i++){  
  8.                 System.out.println(Thread.currentThread().getName() + " is looping of " + i + " the task is " + taskId);  
  9.                 try {  
  10.                     Thread.sleep(20);  
  11.                 } catch (InterruptedException e) {  
  12.                     // TODO Auto-generated catch block  
  13.                     e.printStackTrace();  
  14.                 }  
  15.                   
  16.             }  
  17.         }  
  18.           
  19.     });  
  20. }  
  21. System.out.println("add  all of 10 task");  
  22. threadPool.shutdown();  

如何實現線程掛掉后重新啟動(創建單一的線程池)newSingleThreadExecutor(),這樣線程池中只會有一個線程工作,當線程失敗后會重新創建一個線程將失敗的線程替換掉。

定時器線程池(scheduleAtFixedRate)與定時器很類似,可以指定線程池中線程在多長時間后執行,以及每個多長時間執行一次,代碼如下,可以模擬讓炸彈在6s后爆炸,并且每個2s炸一次:

  1. Executors.newScheduledThreadPool(3).scheduleAtFixedRate(  
  2. //      .schedule(  
  3.                 new Runnable(){  
  4.  
  5.             public void run() {  
  6.                 System.out.println("boming");  
  7.             }  
  8.               
  9.         }, 62, TimeUnit.SECONDS);  
  10.     } 

大家可以執行代碼測試。

原文鏈接:http://blog.csdn.net/lb85858585/article/details/7288983

【編輯推薦】

  1. 淺析Java抽象類和接口的比較
  2. Java代碼格式規范個人推薦(帶范例)
  3. Java類和對象的初始化順序
  4. Think in Java之構造器的真正調用順序
  5. 用Java編寫你自己的簡單HTTP服務器
責任編輯:林師授 來源: lb85858585的博客
相關推薦

2021-09-11 15:26:23

Java多線程線程池

2023-06-08 07:48:03

Java線程池

2015-03-24 16:29:55

默認線程池java

2012-05-15 02:18:31

Java線程池

2009-07-09 10:28:19

線程池JDK5

2020-09-04 10:29:47

Java線程池并發

2021-02-06 14:02:55

線程池Builder模式

2010-03-15 17:17:29

Java線程池

2025-02-24 08:00:00

線程池Java開發

2015-08-20 09:17:36

Java線程池

2020-11-25 11:33:47

Java線程技術

2023-05-19 08:01:24

Key消費場景

2012-02-01 11:20:23

Java線程

2024-05-21 11:09:17

2023-11-22 08:37:40

Java線程池

2013-05-23 15:59:00

線程池

2021-02-01 08:28:24

Linux線程池Linux系統

2021-06-05 06:49:54

LibuvN-API進程

2020-04-29 14:10:44

Java線程池編程語言

2013-06-08 13:07:23

Java線程池調度器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天av网 | 亚洲综合小视频 | 亚洲精品免费在线 | 日韩精品在线一区 | 欧美亚洲视频在线观看 | 国产精品久久久久久52avav | 国产精品色 | 97精品一区二区 | 国产精品久久久久久久久久久久久 | 亚洲精品区 | 欧美极品一区二区 | 日本在线一二 | 男人天堂av网站 | 国产在线中文字幕 | 久久蜜桃av一区二区天堂 | 日韩二区 | 99热这里只有精品8 激情毛片 | 亚洲视频一区二区三区四区 | 精品久久久久久久久久久 | 国产一级一片免费播放 | 亚洲欧美激情精品一区二区 | 日韩电影免费在线观看中文字幕 | 成人av网站在线观看 | 免费福利视频一区二区三区 | 在线播放国产一区二区三区 | 古典武侠第一页久久777 | 青青草原综合久久大伊人精品 | 一级黄色av电影 | 久热爱 | 日韩日韩日韩日韩日韩日韩日韩 | a欧美 | 在线欧美视频 | 成人在线免费看 | 欧美1页 | .国产精品成人自产拍在线观看6 | 日本不卡免费新一二三区 | 在线亚洲电影 | 亚洲视频在线观看 | 久久久久久99 | 色视频网站 | 国产精品区一区二区三 |