|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.concurrent.AbstractExecutorService java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor
public class ScheduledThreadPoolExecutor
ThreadPoolExecutor
,它可另行安排在給定的延遲後運行命令,或者定期執行命令。需要多個輔助執行緒時,或者要求 ThreadPoolExecutor
具有額外的靈活性或功能時,此類別要優於 Timer
。
一旦啟用已延遲的任務就執行它,但是有關何時啟用,啟用後何時執行則沒有任何實時保證。按照提交的先進先出 (FIFO) 順序來啟用那些被安排在同一執行時間的任務。
雖然此類別繼承自 ThreadPoolExecutor
,但是幾個繼承的調整方法對此類別並無作用。特別是,因為它作為一個使用 corePoolSize 執行緒和一個無界佇列的固定大小的池,所以調整 maximumPoolSize 沒有什麼效果。
擴展注意事項:此類別覆寫 AbstractExecutorService
的 submit 方法,以產生內部物件控制每個任務的延遲和排程。若要保留功能性,子類別中任何進一步覆寫的這些方法都必須調用父級類別版本,父級類別版本有效地禁用附加任務的定制。但是,此類別提供替代受保護的擴展方法 decorateTask(為 Runnable 和 Callable 各提供一種版本),可定制用於通過 execute、submit、schedule、scheduleAtFixedRate 和 scheduleWithFixedDelay 進入的執行命令的具體任務型別。預設情況下,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. }
巢狀類別摘要 |
---|
從類別 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
|
decorateTask(Callable<V> callable,
RunnableScheduledFuture<V> task)
修改或替換用於執行 callable 的任務。 |
|
protected
|
decorateTask(Runnable runnable,
RunnableScheduledFuture<V> task)
修改或替換用於執行 runnable 的任務。 |
|
void |
execute(Runnable command)
使用所要求的零延遲執行命令。 |
|
boolean |
getContinueExistingPeriodicTasksAfterShutdownPolicy()
獲取有關在此執行程序已 shutdown 的情況下、是否繼續執行現有定期任務的策略。 |
|
boolean |
getExecuteExistingDelayedTasksAfterShutdownPolicy()
獲取有關在此執行程序已 shutdown 的情況下是否繼續執行現有延遲任務的策略。 |
|
BlockingQueue<Runnable> |
getQueue()
返回此執行程序使用的任務佇列。 |
|
boolean |
remove(Runnable task)
從執行程序的內部佇列中移除此任務(如果存在),從而如果尚未開始,則其不再運行。 |
|
|
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()
嘗試停止所有正在執行的任務、暫停等待任務的處理,並返回等待執行的任務列表。 |
|
|
submit(Callable<T> task)
提交一個返回值的任務用於執行,返回一個表示任務的未決結果的 Future。 |
|
Future<?> |
submit(Runnable task)
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。 |
|
|
submit(Runnable task,
T result)
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。 |
從類別 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 |
建構子詳細資訊 |
---|
public ScheduledThreadPoolExecutor(int corePoolSize)
corePoolSize
- 池中所保存的執行緒數(包括空閒執行緒)
IllegalArgumentException
- 如果 corePoolSize < 0public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)
corePoolSize
- 池中所保存的執行緒數(包括空閒執行緒)threadFactory
- 執行程序創建新執行緒時使用的處理器
IllegalArgumentException
- 如果 corePoolSize < 0
NullPointerException
- 如果 threadFactory 為 nullpublic ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)
corePoolSize
- 池中所保存的執行緒數(包括空閒執行緒)handler
- 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序
IllegalArgumentException
- 如果 corePoolSize < 0
NullPointerException
- 如果處理程序為 nullpublic ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize
- 池中所保存的執行緒數(包括空閒執行緒)threadFactory
- 執行程序創建新執行緒時使用的處理器handler
- 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序
IllegalArgumentException
- 如果 corePoolSize < 0
NullPointerException
- 如果 threadFactory 或處理程序為 null方法詳細資訊 |
---|
public boolean remove(Runnable task)
ThreadPoolExecutor
複製的描述 此方法可用作取消方案的一部分。它可能無法移除在放置到內部佇列之前已經轉換為其他形式的任務。例如,使用 submit 輸入的任務可能被轉換為維護 Future 狀態的形式。但是,在此情況下,ThreadPoolExecutor.purge()
方法可用於移除那些已被取消的 Future。
ThreadPoolExecutor
中的 remove
task
- 要移除的任務
protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)
runnable
- 所提交的 Runnabletask
- 執行 runnable 所創建的任務
protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
callable
- 所提交的 Callabletask
- 執行 callable 所創建的任務
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorService
複製的描述
ScheduledExecutorService
中的 schedule
command
- 要執行的任務delay
- 從現在開始延遲執行的時間unit
- 延遲參數的時間單位
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService
複製的描述
ScheduledExecutorService
中的 schedule
callable
- 要執行的功能delay
- 從現在開始延遲執行的時間unit
- 延遲參數的時間單位
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
ScheduledExecutorService
複製的描述
ScheduledExecutorService
中的 scheduleAtFixedRate
command
- 要執行的任務initialDelay
- 首次執行的延遲時間period
- 連續執行之間的週期unit
- initialDelay 和 period 參數的時間單位
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
ScheduledExecutorService
複製的描述
ScheduledExecutorService
中的 scheduleWithFixedDelay
command
- 要執行的任務initialDelay
- 首次執行的延遲時間delay
- 一次執行終止和下一次執行開始之間的延遲unit
- initialDelay 和 delay 參數的時間單位
public void execute(Runnable command)
ScheduledFuture
,而不是 command 本身。
Executor
中的 execute
ThreadPoolExecutor
中的 execute
command
- 要執行的任務。
由
- RejectedExecutionHandler 隨意決定的 RejectedExecutionException,如果由於執行程序已關閉而無法接受要執行的任務 。
NullPointerException
- 如果 command 為 null。public Future<?> submit(Runnable task)
ExecutorService
複製的描述
ExecutorService
中的 submit
AbstractExecutorService
中的 submit
task
- 要提交的任務
public <T> Future<T> submit(Runnable task, T result)
ExecutorService
複製的描述
ExecutorService
中的 submit
AbstractExecutorService
中的 submit
task
- 要提交的任務result
- 返回的結果
public <T> Future<T> submit(Callable<T> task)
ExecutorService
複製的描述如果想立即阻塞任務的等待,則可以使用 result = exec.submit(aCallable).get(); 形式的建構。
註:Executors
類別包括了一組方法,可以轉換某些其他常見的類似於閉套件的物件,例如,將 PrivilegedAction
轉換為 Callable
形式,這樣就可以提交它們了。
ExecutorService
中的 submit
AbstractExecutorService
中的 submit
task
- 要提交的任務
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
value
- 如果為 true,則在關閉後繼續執行;否則不執行。getContinueExistingPeriodicTasksAfterShutdownPolicy()
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
value
- 如果為 true,則在關閉後執行;否則不執行。getExecuteExistingDelayedTasksAfterShutdownPolicy()
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)
public void shutdown()
ExecutorService
中的 shutdown
ThreadPoolExecutor
中的 shutdown
public List<Runnable> shutdownNow()
雖然盡最大努力,但並不保證可以停止處理正在執行的任務。此實作通過 Thread.interrupt()
取消任務,所以任何無法回應中斷的任務都可能永遠無法終止。
ExecutorService
中的 shutdownNow
ThreadPoolExecutor
中的 shutdownNow
ScheduledFuture
,包括用 execute 所提交的那些任務,出於安排的目的,這些任務用作零延遲 ScheduledFuture 的基礎。
SecurityException
- 如果安全管理器存在並且關閉此 ExecutorService 可能操作某些不允許調用者修改的執行緒(因為它沒有 RuntimePermission
("modifyThread")),或者安全管理器的 checkAccess 方法拒絕存取。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。