JavaTM 2 Platform
Standard Ed. 6

java.util.concurrent
類別 ScheduledThreadPoolExecutor

java.lang.Object
  繼承者 java.util.concurrent.AbstractExecutorService
      繼承者 java.util.concurrent.ThreadPoolExecutor
          繼承者 java.util.concurrent.ScheduledThreadPoolExecutor
所有已實作的介面:
Executor, ExecutorService, ScheduledExecutorService

public class ScheduledThreadPoolExecutor
extends ThreadPoolExecutor
implements ScheduledExecutorService

ThreadPoolExecutor,它可另行安排在給定的延遲後運行命令,或者定期執行命令。需要多個輔助執行緒時,或者要求 ThreadPoolExecutor 具有額外的靈活性或功能時,此類別要優於 Timer

一旦啟用已延遲的任務就執行它,但是有關何時啟用,啟用後何時執行則沒有任何實時保證。按照提交的先進先出 (FIFO) 順序來啟用那些被安排在同一執行時間的任務。

雖然此類別繼承自 ThreadPoolExecutor,但是幾個繼承的調整方法對此類別並無作用。特別是,因為它作為一個使用 corePoolSize 執行緒和一個無界佇列的固定大小的池,所以調整 maximumPoolSize 沒有什麼效果。

擴展注意事項:此類別覆寫 AbstractExecutorServicesubmit 方法,以產生內部物件控制每個任務的延遲和排程。若要保留功能性,子類別中任何進一步覆寫的這些方法都必須調用父級類別版本,父級類別版本有效地禁用附加任務的定制。但是,此類別提供替代受保護的擴展方法 decorateTask(為 RunnableCallable 各提供一種版本),可定制用於通過 executesubmitschedulescheduleAtFixedRatescheduleWithFixedDelay 進入的執行命令的具體任務型別。預設情況下,ScheduledThreadPoolExecutor 使用一個擴展 FutureTask 的任務型別。但是,可以使用下列形式的子類別修改或替換該型別。

 public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor {

   static class CustomTask<V> implements RunnableScheduledFuture<V> { ... }

   protected <V> RunnableScheduledFuture<V> decorateTask(
                Runnable r, RunnableScheduledFuture<V> task) {
       return new CustomTask<V>(r, task);
   }

   protected <V> RunnableScheduledFuture<V> decorateTask(
                Callable<V> c, RunnableScheduledFuture<V> task) {
       return new CustomTask<V>(c, task);
   }
   // ... add constructors, etc.
 }
 

從以下版本開始:
1.5

巢狀類別摘要
 
從類別 java.util.concurrent.ThreadPoolExecutor 繼承的巢狀類別/介面
ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.DiscardPolicy
 
建構子摘要
ScheduledThreadPoolExecutor(int corePoolSize)
          使用給定核心池大小創建一個新 ScheduledThreadPoolExecutor。
ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)
          使用給定初始參數創建一個新 ScheduledThreadPoolExecutor。
ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)
          使用給定的初始參數創建一個新 ScheduledThreadPoolExecutor。
ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)
          使用給定初始參數創建一個新 ScheduledThreadPoolExecutor。
 
方法摘要
protected
<V> RunnableScheduledFuture<V>
decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
          修改或替換用於執行 callable 的任務。
protected
<V> RunnableScheduledFuture<V>
decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)
          修改或替換用於執行 runnable 的任務。
 void execute(Runnable command)
          使用所要求的零延遲執行命令。
 boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
          獲取有關在此執行程序已 shutdown 的情況下、是否繼續執行現有定期任務的策略。
 boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
          獲取有關在此執行程序已 shutdown 的情況下是否繼續執行現有延遲任務的策略。
 BlockingQueue<Runnable> getQueue()
          返回此執行程序使用的任務佇列。
 boolean remove(Runnable task)
          從執行程序的內部佇列中移除此任務(如果存在),從而如果尚未開始,則其不再運行。
<V> ScheduledFuture<V>
schedule(Callable<V> callable, long delay, TimeUnit unit)
          創建並執行在給定延遲後啟用的 ScheduledFuture。
 ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
          創建並執行在給定延遲後啟用的一次性操作。
 ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
          創建並執行一個在給定初始延遲後首次啟用的定期操作,後續操作具有給定的週期;也就是將在 initialDelay 後開始執行,然後在 initialDelay+period 後執行,接著在 initialDelay + 2 * period 後執行,依此類別推。
 ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
          創建並執行一個在給定初始延遲後首次啟用的定期操作,隨後,在每一次執行終止和下一次執行開始之間都存在給定的延遲。
 void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
          設置有關在此執行程序已 shutdown 的情況下是否繼續執行現有定期任務的策略。
 void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
          設置有關在此執行程序已 shutdown 的情況下是否繼續執行現有延遲任務的策略。
 void shutdown()
          在以前已提交任務的執行中發起一個有序的關閉,但是不接受新任務。
 List<Runnable> shutdownNow()
          嘗試停止所有正在執行的任務、暫停等待任務的處理,並返回等待執行的任務列表。
<T> Future<T>
submit(Callable<T> task)
          提交一個返回值的任務用於執行,返回一個表示任務的未決結果的 Future。
 Future<?> submit(Runnable task)
          提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。
<T> Future<T>
submit(Runnable task, T result)
          提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。
 
從類別 java.util.concurrent.ThreadPoolExecutor 繼承的方法
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, terminated
 
從類別 java.util.concurrent.AbstractExecutorService 繼承的方法
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
 
從類別 java.lang.Object 繼承的方法
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
從介面 java.util.concurrent.ExecutorService 繼承的方法
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated
 

建構子詳細資訊

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize)
使用給定核心池大小創建一個新 ScheduledThreadPoolExecutor。

參數:
corePoolSize - 池中所保存的執行緒數(包括空閒執行緒)
拋出:
IllegalArgumentException - 如果 corePoolSize < 0

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory)
使用給定的初始參數創建一個新 ScheduledThreadPoolExecutor。

參數:
corePoolSize - 池中所保存的執行緒數(包括空閒執行緒)
threadFactory - 執行程序創建新執行緒時使用的處理器
拋出:
IllegalArgumentException - 如果 corePoolSize < 0
NullPointerException - 如果 threadFactory 為 null

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   RejectedExecutionHandler handler)
使用給定初始參數創建一個新 ScheduledThreadPoolExecutor。

參數:
corePoolSize - 池中所保存的執行緒數(包括空閒執行緒)
handler - 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序
拋出:
IllegalArgumentException - 如果 corePoolSize < 0
NullPointerException - 如果處理程序為 null

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory,
                                   RejectedExecutionHandler handler)
使用給定初始參數創建一個新 ScheduledThreadPoolExecutor。

參數:
corePoolSize - 池中所保存的執行緒數(包括空閒執行緒)
threadFactory - 執行程序創建新執行緒時使用的處理器
handler - 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序
拋出:
IllegalArgumentException - 如果 corePoolSize < 0
NullPointerException - 如果 threadFactory 或處理程序為 null
方法詳細資訊

remove

public boolean remove(Runnable task)
從類別 ThreadPoolExecutor 複製的描述
從執行程序的內部佇列中移除此任務(如果存在),從而如果尚未開始,則其不再運行。

此方法可用作取消方案的一部分。它可能無法移除在放置到內部佇列之前已經轉換為其他形式的任務。例如,使用 submit 輸入的任務可能被轉換為維護 Future 狀態的形式。但是,在此情況下,ThreadPoolExecutor.purge() 方法可用於移除那些已被取消的 Future。

覆寫:
類別 ThreadPoolExecutor 中的 remove
參數:
task - 要移除的任務
返回:
如果已經移除任務,則返回 true

decorateTask

protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable,
                                                      RunnableScheduledFuture<V> task)
修改或替換用於執行 runnable 的任務。此方法可覆寫用於管理內部任務的具體類別。預設實作只返回給定任務。

參數:
runnable - 所提交的 Runnable
task - 執行 runnable 所創建的任務
返回:
可以執行 runnable 的任務
從以下版本開始:
1.6

decorateTask

protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable,
                                                      RunnableScheduledFuture<V> task)
修改或替換用於執行 callable 的任務。此方法可覆寫用於管理內部任務的具體類別。預設實作返回給定任務。

參數:
callable - 所提交的 Callable
task - 執行 callable 所創建的任務
返回:
可以執行 callable 的任務
從以下版本開始:
1.6

schedule

public ScheduledFuture<?> schedule(Runnable command,
                                   long delay,
                                   TimeUnit unit)
從介面 ScheduledExecutorService 複製的描述
創建並執行在給定延遲後啟用的一次性操作。

指定者:
介面 ScheduledExecutorService 中的 schedule
參數:
command - 要執行的任務
delay - 從現在開始延遲執行的時間
unit - 延遲參數的時間單位
返回:
表示掛起任務完成的 ScheduledFuture,並且其 get() 方法在完成後將返回 null

schedule

public <V> ScheduledFuture<V> schedule(Callable<V> callable,
                                       long delay,
                                       TimeUnit unit)
從介面 ScheduledExecutorService 複製的描述
創建並執行在給定延遲後啟用的 ScheduledFuture。

指定者:
介面 ScheduledExecutorService 中的 schedule
參數:
callable - 要執行的功能
delay - 從現在開始延遲執行的時間
unit - 延遲參數的時間單位
返回:
可用於提取結果或取消的 ScheduledFuture

scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                              long initialDelay,
                                              long period,
                                              TimeUnit unit)
從介面 ScheduledExecutorService 複製的描述
創建並執行一個在給定初始延遲後首次啟用的定期操作,後續操作具有給定的週期;也就是將在 initialDelay 後開始執行,然後在 initialDelay+period 後執行,接著在 initialDelay + 2 * period 後執行,依此類別推。如果任務的任何一個執行遇到異常,則後續執行都會被取消。否則,只能通過執行程序的取消或終止方法來終止該任務。如果此任務的任何一個執行要花費比其週期更長的時間,則將推遲後續執行,但不會同時執行。

指定者:
介面 ScheduledExecutorService 中的 scheduleAtFixedRate
參數:
command - 要執行的任務
initialDelay - 首次執行的延遲時間
period - 連續執行之間的週期
unit - initialDelay 和 period 參數的時間單位
返回:
表示掛起任務完成的 ScheduledFuture,並且其 get() 方法在取消後將拋出異常

scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                 long initialDelay,
                                                 long delay,
                                                 TimeUnit unit)
從介面 ScheduledExecutorService 複製的描述
創建並執行一個在給定初始延遲後首次啟用的定期操作,隨後,在每一次執行終止和下一次執行開始之間都存在給定的延遲。如果任務的任一執行遇到異常,就會取消後續執行。否則,只能通過執行程序的取消或終止方法來終止該任務。

指定者:
介面 ScheduledExecutorService 中的 scheduleWithFixedDelay
參數:
command - 要執行的任務
initialDelay - 首次執行的延遲時間
delay - 一次執行終止和下一次執行開始之間的延遲
unit - initialDelay 和 delay 參數的時間單位
返回:
表示掛起任務完成的 ScheduledFuture,並且其 get() 方法在取消後將拋出異常

execute

public void execute(Runnable command)
使用所要求的零延遲執行命令。這在效果上等同於調用 schedule(command, 0, anyUnit)。注意,對由 shutdownNow 所返回的佇列和列表的檢查將存取零延遲的 ScheduledFuture,而不是 command 本身。

指定者:
介面 Executor 中的 execute
覆寫:
類別 ThreadPoolExecutor 中的 execute
參數:
command - 要執行的任務。
拋出:
- RejectedExecutionHandler 隨意決定的 RejectedExecutionException,如果由於執行程序已關閉而無法接受要執行的任務 。
NullPointerException - 如果 command 為 null。

submit

public Future<?> submit(Runnable task)
從介面 ExecutorService 複製的描述
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的 get 方法在成功 完成時將會返回 null

指定者:
介面 ExecutorService 中的 submit
覆寫:
類別 AbstractExecutorService 中的 submit
參數:
task - 要提交的任務
返回:
表示任務等待完成的 Future

submit

public <T> Future<T> submit(Runnable task,
                            T result)
從介面 ExecutorService 複製的描述
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的 get 方法在成功完成時將會返回給定的結果。

指定者:
介面 ExecutorService 中的 submit
覆寫:
類別 AbstractExecutorService 中的 submit
參數:
task - 要提交的任務
result - 返回的結果
返回:
表示任務等待完成的 Future

submit

public <T> Future<T> submit(Callable<T> task)
從介面 ExecutorService 複製的描述
提交一個返回值的任務用於執行,返回一個表示任務的未決結果的 Future。該 Future 的 get 方法在成功完成時將會返回該任務的結果。

如果想立即阻塞任務的等待,則可以使用 result = exec.submit(aCallable).get(); 形式的建構。

註:Executors 類別包括了一組方法,可以轉換某些其他常見的類似於閉套件的物件,例如,將 PrivilegedAction 轉換為 Callable 形式,這樣就可以提交它們了。

指定者:
介面 ExecutorService 中的 submit
覆寫:
類別 AbstractExecutorService 中的 submit
參數:
task - 要提交的任務
返回:
表示任務等待完成的 Future

setContinueExistingPeriodicTasksAfterShutdownPolicy

public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
設置有關在此執行程序已 shutdown 的情況下是否繼續執行現有定期任務的策略。在這種情況下,僅在執行 shutdownNow 時,或者在執行程序已關閉、將策略設置為 false 後才終止這些任務。此值預設為 false。

參數:
value - 如果為 true,則在關閉後繼續執行;否則不執行。
另請參見:
getContinueExistingPeriodicTasksAfterShutdownPolicy()

getContinueExistingPeriodicTasksAfterShutdownPolicy

public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
獲取有關在此執行程序已 shutdown 的情況下、是否繼續執行現有定期任務的策略。在這種情況下,僅在執行 shutdownNow 時,或者在執行程序已關閉時將策略設置為 false 後才終止這些任務。此值預設為 false。

返回:
如果關閉後繼續執行,則返回 true。
另請參見:
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)

setExecuteExistingDelayedTasksAfterShutdownPolicy

public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
設置有關在此執行程序已 shutdown 的情況下是否繼續執行現有延遲任務的策略。在這種情況下,僅在執行 shutdownNow 時,或者在執行程序已關閉、將策略設置為 false 後才終止這些任務。此值預設為 true。

參數:
value - 如果為 true,則在關閉後執行;否則不執行。
另請參見:
getExecuteExistingDelayedTasksAfterShutdownPolicy()

getExecuteExistingDelayedTasksAfterShutdownPolicy

public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
獲取有關在此執行程序已 shutdown 的情況下是否繼續執行現有延遲任務的策略。在這種情況下,僅在執行 shutdownNow 時,或者在執行程序已關閉時將策略設置為 false 後才終止這些任務。此值預設為 true。

返回:
如果關閉後執行,則返回 true
另請參見:
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)

shutdown

public void shutdown()
在以前已提交任務的執行中發起一個有序的關閉,但是不接受新任務。如果已將 ExecuteExistingDelayedTasksAfterShutdownPolicy 設置為 false,則取消尚未超出其延遲的現有延遲任務。並且除非已將 ContinueExistingPeriodicTasksAfterShutdownPolicy 設置為 true,否則將取消現有定期任務的後續執行。

指定者:
介面 ExecutorService 中的 shutdown
覆寫:
類別 ThreadPoolExecutor 中的 shutdown

shutdownNow

public List<Runnable> shutdownNow()
嘗試停止所有正在執行的任務、暫停等待任務的處理,並返回等待執行的任務列表。

雖然盡最大努力,但並不保證可以停止處理正在執行的任務。此實作通過 Thread.interrupt() 取消任務,所以任何無法回應中斷的任務都可能永遠無法終止。

指定者:
介面 ExecutorService 中的 shutdownNow
覆寫:
類別 ThreadPoolExecutor 中的 shutdownNow
返回:
從未開始執行的任務列表。此列表中的每個元素都是一個 ScheduledFuture,包括用 execute 所提交的那些任務,出於安排的目的,這些任務用作零延遲 ScheduledFuture 的基礎。
拋出:
SecurityException - 如果安全管理器存在並且關閉此 ExecutorService 可能操作某些不允許調用者修改的執行緒(因為它沒有 RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕存取。

getQueue

public BlockingQueue<Runnable> getQueue()
返回此執行程序使用的任務佇列。此佇列中的每個元素都是一個 ScheduledFuture,包括用 execute 所提交的那些任務,出於安排的目的,這些任務用作零延遲 ScheduledFuture 的基礎。無法 保證對此佇列進行迭代的迭代器會以任務執行的順序遍歷各任務。

覆寫:
類別 ThreadPoolExecutor 中的 getQueue
返回:
任務佇列。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only