TopBlend:
Here is the
first difference.
There are 57 differences.
is old.
is new.
java.util.concurrent
Class ScheduledThreadPoolExecutor
java.lang.Object
java.util.concurrent.AbstractExecutorService
java.util.concurrent.ThreadPoolExecutor
java.util.concurrent.ScheduledThreadPoolExecutor
-
All Implemented Interfaces:
-
Executor
,
ExecutorService
,
ScheduledExecutorService
-
public class ScheduledThreadPoolExecutor
- extends ThreadPoolExecutor
- implements ScheduledExecutorService
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.
}
-
Since:
-
1.5
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.
|
boolean
|
getContinueExistingPeriodicTasksAfterShutdownPolicy
()
Get the policy on whether to continue executing existing periodic tasks even when this executor has been
shutdown
.
|
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
Set
policy on whether to continue executing existing periodic tasks even when this executor has been
shutdown
. |
void |
setExecuteExistingDelayedTasksAfterShutdownPolicy
(boolean value)
Sets the
Set
policy on whether to execute existing delayed tasks even when this executor has been
shutdown
. |
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.
task that will upon completion return the given result
|
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
|
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize)
-
Creates a new ScheduledThreadPoolExecutor with the given core pool size.
-
Parameters:
-
corePoolSize - the number of threads to keep in the pool, even if they are
idle
idle.
-
Throws:
-
IllegalArgumentException
- if
corePoolSize <= 0
- if corePoolSize less than or equal to zero
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory)
-
Creates a new ScheduledThreadPoolExecutor with the given initial parameters.
-
Parameters:
-
corePoolSize - the number of threads to keep in the pool, even if they are
idle
idle.
-
threadFactory - the factory to use when the executor creates a new
thread
thread.
-
Throws:
-
IllegalArgumentException
- if
corePoolSize <= 0
-
NullPointerException
- if threadFactory is null
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize,
RejectedExecutionHandler handler)
-
Creates a new ScheduledThreadPoolExecutor with the given initial parameters.
-
Parameters:
-
corePoolSize - the number of threads to keep in the pool, even if they are
idle
idle.
-
handler - the handler to use when execution is blocked because the thread bounds and queue capacities are
reached
reached.
-
Throws:
-
IllegalArgumentException
- if
corePoolSize <= 0
-
NullPointerException
- if handler is null
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
-
Creates a new ScheduledThreadPoolExecutor with the given initial parameters.
-
Parameters:
-
corePoolSize - the number of threads to keep in the pool, even if they are
idle
idle.
-
threadFactory - the factory to use when the executor creates a new
thread
thread.
-
handler - the handler to use when execution is blocked because the thread bounds and queue capacities are reached.
-
Throws:
-
IllegalArgumentException
- if
corePoolSize <= 0
-
NullPointerException
- if threadFactory or handler is null
remove
public boolean remove(Runnable task)
-
Description copied from class:
ThreadPoolExecutor
-
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.
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.
-
-
Overrides:
-
remove
in class
ThreadPoolExecutor
-
-
Parameters:
-
task - the task to remove
-
Returns:
-
true if the task was removed
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
schedule
public ScheduledFuture<?> schedule(Runnable command,
long delay,
TimeUnit unit)
-
Description copied from interface:
ScheduledExecutorService
-
Creates and executes a one-shot action that becomes enabled after the given delay.
-
-
Specified by:
-
schedule
in interface
ScheduledExecutorService
-
-
Parameters:
-
command - the task to
execute
execute.
-
delay - the time from now to delay
execution
execution.
-
unit - the time unit of the delay
parameter
parameter.
-
Returns:
-
a
ScheduledFuture
Future
representing pending completion of the
task
task,
and whose
get()
method will return
null
upon
completion
completion.
schedule
public <V> ScheduledFuture<V> schedule(Callable<V> callable,
long delay,
TimeUnit unit)
-
Description copied from interface:
ScheduledExecutorService
-
Creates and executes a ScheduledFuture that becomes enabled after the given delay.
-
-
Specified by:
-
schedule
in interface
ScheduledExecutorService
-
-
Parameters:
-
callable - the function to
execute
execute.
-
delay - the time from now to delay
execution
execution.
-
unit - the time unit of the delay
parameter
parameter.
-
Returns:
-
a ScheduledFuture that can be used to extract result or
cancel
cancel.
scheduleAtFixedRate
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit)
-
Description copied from interface:
ScheduledExecutorService
-
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. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor.
If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.
-
-
Specified by:
-
scheduleAtFixedRate
in interface
ScheduledExecutorService
-
-
Parameters:
-
command - the task to
execute
execute.
-
initialDelay - the time to delay first
execution
execution.
-
period - the period between successive
executions
executions.
-
unit - the time unit of the initialDelay and period parameters
-
Returns:
-
a
ScheduledFuture
Future
representing pending completion of the task, and whose
get()
method will throw an exception upon
cancellation
cancellation.
scheduleWithFixedDelay
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit)
-
Description copied from interface:
ScheduledExecutorService
-
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. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor.
-
-
Specified by:
-
scheduleWithFixedDelay
in interface
ScheduledExecutorService
-
-
Parameters:
-
command - the task to
execute
execute.
-
initialDelay - the time to delay first
execution
execution.
-
delay - the delay between the termination of one execution and the commencement of the
next
next.
-
unit - the time unit of the initialDelay and delay parameters
-
Returns:
-
a
ScheduledFuture
Future
representing pending completion of the task, and whose
get()
method will throw an exception upon
cancellation
cancellation.
execute
public void execute(Runnable command)
-
Executes
Execute
command with zero required delay. This has effect equivalent to
schedule(command, 0, anyUnit)
. Note that inspections of the queue and of the list returned by
shutdownNow
will access the zero-delayed
ScheduledFuture
, not the
command
itself.
-
-
Specified by:
-
execute
in interface
Executor
-
Overrides:
-
execute
in class
ThreadPoolExecutor
-
-
Parameters:
-
command - the task to execute
-
Throws:
-
RejectedExecutionException
- at discretion of
RejectedExecutionHandler
, if task cannot be accepted for execution because the executor has been shut down.
-
NullPointerException
- if command is null
submit
public Future<?> submit(Runnable task)
-
Description copied from interface:
ExecutorService
-
Submits a Runnable task for execution and returns a Future representing that task.
The Future's
get
method will return
null
upon successful completion.
-
-
Specified by:
-
submit
in interface
ExecutorService
-
Overrides:
-
submit
in class
AbstractExecutorService
-
-
Parameters:
-
task - the task to submit
-
Returns:
-
a Future representing pending completion of the task
a Future representing pending completion of the task, and whose
get()
method will return
null
upon completion.
submit
public <T> Future<T> submit(Runnable task,
T result)
-
Description copied from interface:
ExecutorService
-
Submits a Runnable task for execution and returns a Future representing that
task. The Future's
get
method
task that
will
upon completion
return the given result
upon successful completion.
-
-
Specified by:
-
submit
in interface
ExecutorService
-
Overrides:
-
submit
in class
AbstractExecutorService
-
-
Parameters:
-
task - the task to submit
-
result - the result to return
-
Returns:
-
a Future representing pending completion of the task
a Future representing pending completion of the task, and whose
get()
method will return the given result upon completion.
submit
public <T> Future<T> submit(Callable<T> task)
-
Description copied from interface:
ExecutorService
-
Submits a value-returning task for execution and returns a Future representing the pending results of the 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.
-
-
Specified by:
-
submit
in interface
ExecutorService
-
Overrides:
-
submit
in class
AbstractExecutorService
-
-
Parameters:
-
task - the task to submit
-
Returns:
-
a Future representing pending completion of the task
setContinueExistingPeriodicTasksAfterShutdownPolicy
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
-
Sets the
Set
policy on whether to continue executing existing periodic tasks even when this executor has been
shutdown
. In this case, these tasks will only terminate upon
shutdownNow
, or after setting the policy to
false
when already shutdown. This value is by default false.
-
-
-
Parameters:
-
value - if true, continue after shutdown, else don't.
-
See Also:
-
getContinueExistingPeriodicTasksAfterShutdownPolicy()
getExecuteExistingDelayedTasksAfterShutdownPolicy()
getContinueExistingPeriodicTasksAfterShutdownPolicy
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
-
Gets
Get
the policy on whether to continue executing existing periodic tasks even when this executor has been
shutdown
. In this case, these tasks will only terminate upon
shutdownNow
or after setting the policy to
false
when already shutdown. This value is by default false.
-
-
-
Returns:
-
true if will continue after
shutdown
shutdown.
-
See Also:
-
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)
setExecuteExistingDelayedTasksAfterShutdownPolicy
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
-
Sets the
Set
policy on whether to execute existing delayed tasks even when this executor has been
shutdown
. In this case, these tasks will only terminate upon
shutdownNow
, or after setting the policy to
false
when already shutdown. This value is by default true.
-
-
-
Parameters:
-
value - if true, execute after shutdown, else don't.
-
See Also:
-
getExecuteExistingDelayedTasksAfterShutdownPolicy()
getExecuteExistingDelayedTasksAfterShutdownPolicy
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
-
Gets the
Get
policy on whether to execute existing delayed tasks even when this executor has been
shutdown
. In this case, these tasks will only terminate upon
shutdownNow
, or after setting the policy to
false
when already shutdown. This value is by default true.
-
-
-
Returns:
-
true if will execute after
shutdown
shutdown.
-
See Also:
-
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)
shutdown
public void shutdown()
-
Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted. If the
ExecuteExistingDelayedTasksAfterShutdownPolicy
has been set
false
, existing delayed tasks whose delays have not yet elapsed are cancelled. And unless the
ContinueExistingPeriodicTasksAfterShutdownPolicy
has been set
true
, future executions of existing periodic tasks will be cancelled.
-
-
Specified by:
-
shutdown
in interface
ExecutorService
-
Overrides:
-
shutdown
in class
ThreadPoolExecutor
-
shutdownNow
public 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.
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.
-
-
Specified by:
-
shutdownNow
in interface
ExecutorService
-
Overrides:
-
shutdownNow
in class
ThreadPoolExecutor
-
-
Returns:
-
list of tasks that never commenced execution. Each element of this list is a
ScheduledFuture
, including those tasks submitted using
execute
, which are for scheduling purposes used as the basis of a zero-delay
ScheduledFuture
.
-
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.
getQueue
public BlockingQueue<Runnable> getQueue()
-
Returns the task queue used by this executor. Each element of this queue is a
ScheduledFuture
, including those tasks submitted using
execute
which are for scheduling purposes used as the basis of a zero-delay
ScheduledFuture
. Iteration over this queue is not guaranteed to traverse tasks in the order in which they will execute.
-
-
Overrides:
-
getQueue
in class
ThreadPoolExecutor
-
-
Returns:
-
the task queue