最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入java線程池的使用詳解

 更新時間:2013年05月16日 17:54:29   作者:  
本篇文章是對java線程池的使用進行了詳細的分析介紹,需要的朋友參考下
在Java 5.0之前啟動一個任務是通過調用Thread類的start()方法來實現(xiàn)的,任務的提于交和執(zhí)行是同時進行的,如果你想對任務的執(zhí)行進行調度或是控制 同時執(zhí)行的線程數(shù)量就需要額外編寫代碼來完成。5.0里提供了一個新的任務執(zhí)行架構使你可以輕松地調度和控制任務的執(zhí)行,并且可以建立一個類似數(shù)據(jù)庫連接 池的線程池來執(zhí)行任務。這個架構主要有三個接口和其相應的具體類組成。這三個接口是Executor, ExecutorService、ScheduledExecutorService,讓我們先用一個圖來顯示它們的關系:

圖的左側是接口,圖的右側是這些接口的具體類。注意Executor是沒有直接具體實現(xiàn)的。
Executor接口:是用來執(zhí)行Runnable任務的,它只定義一個方法:
•execute(Runnable command):執(zhí)行Ruannable類型的任務
ExecutorService接口:ExecutorService繼承了Executor的方法,并提供了執(zhí)行Callable任務和中止任務執(zhí)行的服務,其定義的方法主要有:
•submit(task):可用來提交Callable或Runnable任務,并返回代表此任務的Future對象
•invokeAll(collection of tasks):批處理任務集合,并返回一個代表這些任務的Future對象集合
•shutdown():在完成已提交的任務后關閉服務,不再接受新任務
•shutdownNow():停止所有正在執(zhí)行的任務并關閉服務。
•isTerminated():測試是否所有任務都執(zhí)行完畢了。
•isShutdown():測試是否該ExecutorService已被關閉 
ScheduledExecutorService接口在ExecutorService的基礎上,ScheduledExecutorService提供了按時間安排執(zhí)行任務的功能,它提供的方法主要有:
•schedule(task, initDelay): 安排所提交的Callable或Runnable任務在initDelay指定的時間后執(zhí)行。
•scheduleAtFixedRate():安排所提交的Runnable任務按指定的間隔重復執(zhí)行
•scheduleWithFixedDelay():安排所提交的Runnable任務在每次執(zhí)行完后,等待delay所指定的時間后重復執(zhí)行。
 
重要的Executors類
雖然以上提到的接口有其實現(xiàn)的具體類,但為了方便Java 5.0建議使用Executors的工具類來得到Executor接口的具體對象,需要注意的是Executors是一個類,不是Executor的復數(shù) 形式。Executors提供了以下一些static的方法:
•callable(Runnable task):將Runnable的任務轉化成Callable的任務
•newSingleThreadExecutor:產(chǎn)生一個ExecutorService對象,這個對象只有一個線程可用來執(zhí)行任務,若任務多于一個,任務將按先后順序執(zhí)行。
•newCachedThreadPool():產(chǎn)生一個ExecutorService對象,這個對象帶有一個線程池,線程池的大小會根據(jù)需要調整,線程執(zhí)行完任務后返回線程池,供執(zhí)行下一次任務使用。
•newFixedThreadPool(int poolSize):產(chǎn)生一個ExecutorService對象,這個對象帶有一個大小為poolSize的線程池,若任務數(shù)量大于poolSize,任務會被放在一個queue里順序執(zhí)行。
•newSingleThreadScheduledExecutor:產(chǎn)生一個ScheduledExecutorService對象,這個對象的線程池大小為1,若任務多于一個,任務將按先后順序執(zhí)行。
•newScheduledThreadPool(int poolSize):產(chǎn)生一個ScheduledExecutorService對象,這個對象的線程池大小為poolSize,若任務數(shù)量大于poolSize,任務會在一個queue里等待執(zhí)行

舉例說明:
應用Executors來建立Thread pool
 
有時候您需要建立一堆Thread來執(zhí)行一些小任務,然而頻繁的建立Thread有時會是個開銷,因為Thread的建立必須與作業(yè)系統(tǒng)互動,如果能建立一個Thread pool來管理這些小的Thread并加以重復使用,對于系統(tǒng)效能會是個改善的方式。
您可以使用Executors來建立Thread pool,Executors有幾個static方法,列出如下:

方法 說明
newCachedThreadPool 建立可以快取的Thread,每個Thread預設可idle 60秒

newFixedThreadPool

包括固定數(shù)量的Thread

newSingleThreadExecutor

只有一個Thread,循序的執(zhí)行指定給它的每個任務
newScheduledThreadPool 可排程的Thread
newSingleThreadScheduledExecutor 單一可排程的Thread

舉個簡單的實例,下面的程式使用newFixedThreadPool方法建立Thread pool,當中包括五個可以重復使用的Thread,您可以指定Runnable物件給它,程式中會產(chǎn)生十個Runnable物件,由于Thread pool中只有五個可用的Thread,所以后來建立的五個Runnable必須等待有空閑的Thread才會被執(zhí)行:
•ExecutorDemo.java
復制代碼 代碼如下:

package onlyfun.caterpillar;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorDemo {
 public static void main(String[] args) {
  ExecutorService service = Executors.newFixedThreadPool(5);

  for(int i = 0; i < 10; i++) {
   final int count = i;
   service.submit
(new Runnable() {
    public void run() {
     System.out.println(count);
     try {
      Thread.sleep(2000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }

    }
   });
  }

  service.shutdown(); // 最后記得關閉Thread pool
 }
}

submit()方法也接受實作Callable介面的物件,最后傳回Future物件,可以取得Callable執(zhí)行過后的傳回結果。如果想利用Executors進行排程,例如排定某個工作30秒后執(zhí)行:
復制代碼 代碼如下:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );       
scheduler.schedule(new Runnable( ) {                              
public void run() {                                  
// 排程工作                              
}                          
},                          
30, TimeUnit.SECONDS);

或排定某個工作5秒后執(zhí)行,之后每30秒執(zhí)行一次:
復制代碼 代碼如下:

 final ScheduledFuture future = scheduler.scheduleAtFixedRate(new Runnable( ) {                              
 public void run() {                                  
 // 排程工作                                  
 System.out.println("t");                              
 }                          
 },                          
 0, 5, TimeUnit.SECONDS);              
 // 排定 60 秒后取消future       
 scheduler.schedule(new Runnable( ) {           
 public void run( ) {             
 future.cancel(false);           
 }         
 }, 60, TimeUnit.SECONDS);

如上所示,想要取消排程任務,可以呼叫ScheduledFuture的cancel()方法。

相關文章

  • C++中的整型

    C++中的整型

    這篇文章我們來聊聊C++中的整型,整型即整數(shù),與小數(shù)對應。許多語言只能表示一種整型(如Python),而在C++當中根據(jù)整數(shù)的范圍提供了好幾種不同的整型,下面文章我們就來看看具體是哪幾種,需要的朋友也可以參考一下
    2021-11-11
  • C語言 數(shù)據(jù)結構與算法之字符串詳解

    C語言 數(shù)據(jù)結構與算法之字符串詳解

    這篇文章將帶大家深入了解C語言數(shù)據(jù)結構與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類型,感興趣的可以學習一下
    2022-01-01
  • 解析C++中的for循環(huán)以及基于范圍的for語句使用

    解析C++中的for循環(huán)以及基于范圍的for語句使用

    這篇文章主要介紹了解析C++中的for循環(huán)以及基于范圍的for語句使用,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • C++中套接字庫sockpp的使用詳解

    C++中套接字庫sockpp的使用詳解

    sockpp是一個開源、簡單、現(xiàn)代的C++套接字庫,這篇文章主要為大家詳細介紹一下套接字庫sockpp的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2023-11-11
  • 使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池

    使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池

    這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)MySQL數(shù)據(jù)庫連接池,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-03-03
  • C++實現(xiàn)設計模式之裝飾者模式詳解

    C++實現(xiàn)設計模式之裝飾者模式詳解

    這篇文章主要介紹了C++設計模式之裝飾模式,裝飾模式能夠實現(xiàn)動態(tài)的為對象添加功能,是從一個對象外部來給對象添加功能,需要的朋友可以參考下
    2021-09-09
  • 用C語言進行最基本的socket編程

    用C語言進行最基本的socket編程

    這篇文章主要介紹了C語言下socket編程的基本知識講解,包括最基本的客戶端發(fā)送及服務器端接受數(shù)據(jù)的實現(xiàn),需要的朋友可以參考下
    2015-11-11
  • 算法學習入門之使用C語言實現(xiàn)各大基本的排序算法

    算法學習入門之使用C語言實現(xiàn)各大基本的排序算法

    這篇文章主要介紹了使用C語言實現(xiàn)各大基本的排序算法的方法,同時也對算法的選擇問題上給出了一些建議,的朋友可以參考下
    2015-12-12
  • Dijkstra算法與Prim算法的異同案例詳解

    Dijkstra算法與Prim算法的異同案例詳解

    這篇文章主要介紹了Dijkstra算法與Prim算法的異同案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • C/C++函數(shù)的調用約定的使用

    C/C++函數(shù)的調用約定的使用

    本文主要介紹了C/C++函數(shù)的調用約定的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

洛扎县| 五大连池市| 藁城市| 乌兰浩特市| 蚌埠市| 土默特右旗| 阿巴嘎旗| 达尔| 连云港市| 岳池县| 集安市| 东安县| 甘肃省| 桐城市| 荆门市| 蕉岭县| 钦州市| 浠水县| 孟州市| 土默特左旗| 吉安县| 淅川县| 纳雍县| 乐清市| 鄱阳县| 庄河市| 托克托县| 余江县| 改则县| 陇南市| 崇州市| 辽阳市| 正安县| 荣成市| 阿坝县| 军事| 从化市| 秦安县| 徐州市| 同江市| 武穴市|