is new.
java.lang.Objectjava.util.concurrent.AbstractExecutorService
java.util.concurrent.ThreadPoolExecutor
java.util.concurrent.ScheduledThreadPoolExecutor
public class ScheduledThreadPoolExecutor
A ThreadPoolExecutor that can additionally schedule commands to run after a given delay, or to execute periodically. This class is preferable to Timer when multiple worker threads are needed, or when the additional flexibility or capabilities of ThreadPoolExecutor (which this class extends) are required.
Delayed tasks execute no sooner than they are enabled, but without any real-time guarantees about when, after they are enabled, they will commence. Tasks scheduled for exactly the same execution time are enabled in first-in-first-out (FIFO) order of submission.
While this class inherits from ThreadPoolExecutor , a few of the inherited tuning methods are not useful for it. In particular, because it acts as a fixed-sized pool using corePoolSize threads and an unbounded queue, adjustments to maximumPoolSize have no useful effect.
Extension notes:
This class overrides
AbstractExecutorService
submit
methods to generate internal objects to control per-task delays and scheduling. To preserve functionality, any further overrides of these methods in subclasses must invoke superclass versions, which effectively disables additional task customization. However, this class provides alternative protected extension method
decorateTask
(one version each for
Runnable
and
Callable
) that can be used to customize the concrete task types used to execute commands entered via
execute
,
submit
,
schedule
,
scheduleAtFixedRate
, and
scheduleWithFixedDelay
. By default, a
ScheduledThreadPoolExecutor
uses a task type extending
FutureTask
. However, this may be modified or replaced using subclasses of the form:
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. }
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class java.util.concurrent. ThreadPoolExecutor |
|---|
| ThreadPoolExecutor.AbortPolicy , ThreadPoolExecutor.CallerRunsPolicy , ThreadPoolExecutor.DiscardOldestPolicy , ThreadPoolExecutor.DiscardPolicy |
| Constructor Summary | |
|---|---|
|
ScheduledThreadPoolExecutor
(int corePoolSize) Creates a new ScheduledThreadPoolExecutor with the given core pool size. |
|
|
ScheduledThreadPoolExecutor
(int corePoolSize,
RejectedExecutionHandler
handler) Creates a new ScheduledThreadPoolExecutor with the given initial parameters. |
|
|
ScheduledThreadPoolExecutor
(int corePoolSize,
ThreadFactory
threadFactory) Creates a new ScheduledThreadPoolExecutor with the given initial parameters. |
|
|
ScheduledThreadPoolExecutor
(int corePoolSize,
ThreadFactory
threadFactory,
RejectedExecutionHandler
handler) Creates a new ScheduledThreadPoolExecutor with the given initial parameters. |
|
| Method Summary | ||||
|---|---|---|---|---|
protected
|
decorateTask
(
Callable
<V> callable,
RunnableScheduledFuture
<V> task)
Modifies or replaces the task used to execute a callable.
|
|||
|
|
|||
protected
|
decorateTask
(
Runnable
runnable,
RunnableScheduledFuture
<V> task)
Modifies or replaces the task used to execute a runnable.
|
|||
void
|
execute
(
Runnable
Executes command with zero required delay.
|
|||
boolean
|
getContinueExistingPeriodicTasksAfterShutdownPolicy
()
Gets the policy on whether to continue executing existing periodic tasks even when this executor has been
shutdown
.
|
|||
boolean
|
getExecuteExistingDelayedTasksAfterShutdownPolicy
()
Gets the policy on whether to execute existing delayed tasks even when this executor has been
shutdown
.
|
|||
| BlockingQueue < Runnable > |
getQueue
() Returns the task queue used by this executor. |
|||
| boolean |
remove
(
Runnable
task) Removes this task from the executor's internal queue if it is present, thus causing it not to be run if it has not already started. |
|||
|
schedule
(
Callable
<V> callable, long delay,
TimeUnit
unit) Creates and executes a ScheduledFuture that becomes enabled after the given delay. |
|||
| ScheduledFuture <?> |
schedule
(
Runnable
command, long delay,
TimeUnit
unit) Creates and executes a one-shot action that becomes enabled after the given delay. |
|||
| ScheduledFuture <?> |
scheduleAtFixedRate
(
Runnable
command, long initialDelay, long period,
TimeUnit
unit) Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period; that is executions will commence after initialDelay then initialDelay+period , then initialDelay + 2 * period , and so on. |
|||
| ScheduledFuture <?> |
scheduleWithFixedDelay
(
Runnable
command, long initialDelay, long delay,
TimeUnit
unit) Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given delay between the termination of one execution and the commencement of the next. |
|||
| void |
setContinueExistingPeriodicTasksAfterShutdownPolicy
(boolean value)
Sets the
|
|||
| void |
setExecuteExistingDelayedTasksAfterShutdownPolicy
(boolean value)
Sets the
|
|||
| void |
shutdown
() Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted. |
|||
| List < Runnable > |
shutdownNow
() Attempts to stop all actively executing tasks, halts the processing of waiting tasks, and returns a list of the tasks that were awaiting execution. |
|||
|
submit
(
Callable
<T> task) Submits a value-returning task for execution and returns a Future representing the pending results of the task. |
|||
| Future |
submit
(
Runnable
Submits a Runnable task for execution and returns a Future representing that task. |
|||
|
submit
(
Runnable
task, T result) Submits a Runnable task for execution and returns a Future representing that
task.
|
|||
| Methods inherited from class 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
|
| Methods inherited from class java.util.concurrent. AbstractExecutorService |
|---|
invokeAll
,
invokeAll
,
invokeAny
,
invokeAny
,
newTaskFor
,
newTaskFor
|
| Methods inherited from class java.lang. Object |
|---|
| clone , equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
| Methods inherited from interface java.util.concurrent. ExecutorService |
|---|
| awaitTermination , invokeAll , invokeAll , invokeAny , invokeAny , isShutdown , isTerminated |
| Constructor Detail |
|---|
public ScheduledThreadPoolExecutor(int corePoolSize)
idle
- if
corePoolSize <= 0
public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory)
idle
thread
IllegalArgumentException
- if
corePoolSize <= 0
public ScheduledThreadPoolExecutor(int corePoolSize,
RejectedExecutionHandler handler)
idle
reached
IllegalArgumentException
- if
corePoolSize <= 0
public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
idle
thread
IllegalArgumentException
- if
corePoolSize <= 0
| Method Detail |
|---|
public boolean remove(Runnable task)
This method may be useful as one part of a cancellation scheme. It may fail to remove tasks that have been converted into other forms before being placed on the internal queue. For example, a task entered using submit might be converted into a form that maintains Future status. However, in such cases, method ThreadPoolExecutor.purge() may be used to remove those Futures that have been cancelled.
decorateTask
protected <V>
RunnableScheduledFuture
<V>
decorateTask
(
Runnable
runnable,
RunnableScheduledFuture
<V> task)
Modifies or replaces the task used to execute a runnable. This method can be used to override the concrete class used for managing internal tasks. The default implementation simply returns the given task.
Parameters:
runnable - the submitted Runnable
task - the task created to execute the runnable
Returns:
a task that can execute the runnable
Since:
1.6
decorateTask
protected <V>
RunnableScheduledFuture
<V>
decorateTask
(
Callable
<V> callable,
RunnableScheduledFuture
<V> task)
Modifies or replaces the task used to execute a callable. This method can be used to override the concrete class used for managing internal tasks. The default implementation simply returns the given task.
Parameters:
callable - the submitted Callable
task - the task created to execute the callable
Returns:
a task that can execute the callable
Since:
1.6
public ScheduledFuture<?> schedule(Runnable command,
long delay,
TimeUnit unit)
execute
execution
parameter
ScheduledFuture
task
completion
public <V> ScheduledFuture<V> schedule(Callable<V> callable,
long delay,
TimeUnit unit)
execute
execution
parameter
cancel
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit)
If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.
execute
execution
executions
ScheduledFuture
cancellation
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit)
execute
execution
next
ScheduledFuture
cancellation
public void execute(Runnable command)
Executes
public Future<?> submit(Runnable task)
The Future's
get
method will return
null
upon successful completion.
a Future representing pending completion of the task
public <T> Future<T> submit(Runnable task,
T result)
task. The Future's
get
method
upon successful completion.
a Future representing pending completion of the task
public <T> Future<T> submit(Callable<T> task)
The Future's
get
method will return the task's result upon successful completion.
If you would like to immediately block waiting for a task, you can use constructions of the form result = exec.submit(aCallable).get();
Note: The Executors class includes a set of methods that can convert some other common closure-like objects, for example, PrivilegedAction to Callable form so they can be submitted.
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
Sets the
getContinueExistingPeriodicTasksAfterShutdownPolicy()
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
Gets
shutdown
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
Sets the
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
Gets the
shutdown
public void shutdown()
public List<Runnable> shutdownNow()
There are no guarantees beyond best-effort attempts to stop processing actively executing tasks. This implementation cancels tasks via
Thread.interrupt()
, so
if
any
task that fails
tasks mask or fail
to respond to
interrupts
interrupts, they
may never terminate.
Throws:
SecurityException
- if a security manager exists and shutting down this ExecutorService may manipulate threads that the caller is not permitted to modify because it does not hold
RuntimePermission
("modifyThread")
, or the security manager's
checkAccess
method denies access.
public BlockingQueue<Runnable> getQueue()