Java多線程的控制 – JAVA編程語言程序開發技術文章

多線程,是很多編程人員再熟悉不過的瞭。

在稍老一些的Java版本中,具體是在Java 5.0以前,啟動一個任務是通過調用Thread類的start()方法來實現的,任務的提交和執行時同時進行的,如果想對任務的執行進行調度,或者想控制同時執行的線程數量就需要額外編寫代碼來完成。而在Java 5.0裡提供瞭一個新的任務執行架構使我們可以很輕松地調度和控制任務的執行。這個架構主要有三個接口和其相應的類組成。這三個接口分別是:

Executor、

ExevutirService

ScheduledExecutorService

下面我們來具體說明。

Executor接口:是用來執行Runnable任務的,它值定義瞭一個方法:

  execute(Runnable command):執行Ruannable類型的任務.

ExecutorService接口:ExecutorService繼承瞭Executor的方法,並提供瞭執行Callable任務和中指任務執行的服務,其定義的方法主要有:

  submit(task):可用來提交Callable或Runnable任務,並返回代表此任務的Future對象

  invokeAll(collection of tasks):批處理任務集合,並返回一個代表這些任務的Future對象集合

  shutdown():在完成已提交的任務後關閉服務,不再接受新任務

  shutdownNow():停止所有正在執行的任務並關閉服務。

  isTerminated():測試是否所有任務都執行完畢瞭。

  isShutdown():測試是否該ExecutorService已被關閉

ScheduledExecutorService接口:

在ExecutorService的基礎上,ScheduledExecutorService提供瞭按時間安排執行任務的功能,它提供的方法主要有:

  schedule(task, initDelay): 安排所提交的Callable或Runnable任務在initDelay指定的時間後執行

  scheduleAtFixedRate():安排所提交的Runnable任務按指定的間隔重復執行

  scheduleWithFixedDelay():安排所提交的Runnable任務在每次執行完後,等待delay所指定的時間後重復執行

____________________

雖然以上提到的接口有其實現類,但是為瞭方便,我們建議使用Executors的工具類來得到Executor接口的具體對象,需要註意的是,Executors是一個類,不是Executor的復數形式,Executor提供瞭一下一些靜態方法:

callable(Runnable task):將一個Runnable的任務轉化成callable的任務

newSingleThreadExecutor: 產生一個ExecutorService對象,這個對象隻有一個線程可用來執行任務,若任務多於一個,任務將按先後順序執行

newCachedThreadPool(): 產生一個ExecutorService對象,這個對象帶有一個線程池,線程池的大小會根據需要調整,線程執行完任務後返回線程池,供執行下一次任務使用。

newFixedThreadPool(int poolSize):產生一個ExecutorService對象,這個對象帶有一個大小為poolSize的線程池,若任務數量大於poolSize,任務會被放在一個queue裡順序執行

newSingleThreadScheduledExecutor:產生一個ScheduledExecutorService對象,這個對象的線程池大小為1,若任務多於一個,任務將按先後順序執行

newScheduledThreadPool(int poolSize): 產生一個ScheduledExecutorService對象,這個對象的線程池大小為poolSize,若任務數量大於poolSize,任務會在一個queue裡等待執行

摘自 android小益的專欄

發佈留言