public interface IScheduledExecutorService extends DistributedObject
ScheduledExecutorService
.
IScheduledExecutorService
provides similar API to the
ScheduledExecutorService
with some exceptions but also
additional methods like scheduling tasks on a specific member, on a member
who is owner of a specific key, executing a tasks on multiple members etc.
Tasks (Runnable
and/or Callable
) scheduled on
any partition through an IScheduledExecutorService
, yield
some durability characteristics.
durability
config), the
scheduled task will get re-scheduled on a replica node.
Member
.
Upon scheduling, a task acquires a resource handler, see
ScheduledTaskHandler
. The handler is generated before the actual
scheduling of the task on the node, which allows for a way to access the
future in an event of a node failure, immediately after scheduling, and
also guarantees no duplicates in the cluster by utilising a unique name
per task. A name can also be defined by the user by having the
Runnable
or Callable
implement the NamedTask
.
Alternatively, one can wrap any task using the
TaskUtils.named(String, Callable)
or
TaskUtils.named(String, Runnable)
for simplicity.
One difference of this service in comparison to
ScheduledExecutorService
is the
scheduleAtFixedRate(Runnable, long, long, TimeUnit)
which has
similar semantic to
ScheduledExecutorService.scheduleAtFixedRate(Runnable, long, long, TimeUnit)
.
It guarantees a task won't be executed by multiple threads concurrently.
The difference is that this service will skip a scheduled execution if
another thread is still running the same task, instead of postponing its
execution.
The other difference is this service does not offer an equivalent of
ScheduledExecutorService.scheduleWithFixedDelay(Runnable, long, long, TimeUnit)
Tasks that are holding state that needs to be also durable across
partitions, will need to implement the StatefulTask
interface.
Supports split brain protection SplitBrainProtectionConfig
since 3.10
in cluster versions 3.10 and higher.
Modifier and Type | Method and Description |
---|---|
<V> Map<Member,List<IScheduledFuture<V>>> |
getAllScheduledFutures()
Fetches and returns all scheduled (not disposed yet) futures from all
members in the cluster.
|
<V> IScheduledFuture<V> |
getScheduledFuture(ScheduledTaskHandler handler)
Creates a new
IScheduledFuture from the given handler. |
<V> IScheduledFuture<V> |
schedule(Callable<V> command,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the given delay.
|
<V> IScheduledFuture<V> |
schedule(Runnable command,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the given delay.
|
<V> IScheduledFuture<V> |
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.
|
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnAllMembers(Callable<V> command,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on all cluster
Member s. |
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnAllMembers(Runnable command,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on all cluster
Member s. |
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnAllMembersAtFixedRate(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 on all
cluster
Member s. |
<V> IScheduledFuture<V> |
scheduleOnKeyOwner(Callable<V> command,
Object key,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on the partition owner of the given key.
|
<V> IScheduledFuture<V> |
scheduleOnKeyOwner(Runnable command,
Object key,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on the partition owner of the given key.
|
<V> IScheduledFuture<V> |
scheduleOnKeyOwnerAtFixedRate(Runnable command,
Object key,
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 on the
partition owner of the given key.
|
<V> IScheduledFuture<V> |
scheduleOnMember(Callable<V> command,
Member member,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay at the given
Member . |
<V> IScheduledFuture<V> |
scheduleOnMember(Runnable command,
Member member,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay at the given
Member . |
<V> IScheduledFuture<V> |
scheduleOnMemberAtFixedRate(Runnable command,
Member member,
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 at the
given
Member . |
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnMembers(Callable<V> command,
Collection<Member> members,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on all
Member s given. |
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnMembers(Runnable command,
Collection<Member> members,
long delay,
TimeUnit unit)
Creates and executes a one-shot action that becomes enabled after the
given delay on all
Member s given. |
<V> Map<Member,IScheduledFuture<V>> |
scheduleOnMembersAtFixedRate(Runnable command,
Collection<Member> members,
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 on all
Member s given. |
void |
shutdown()
Initiates an orderly shutdown in which previously submitted tasks are
executed, but no new tasks will be accepted.
|
destroy, getDestroyContextForTenant, getName, getPartitionKey, getServiceName
@Nonnull <V> IScheduledFuture<V> schedule(@Nonnull Runnable command, long delay, @Nonnull TimeUnit unit)
V
- the result type of the returned ScheduledFuturecommand
- the task to executedelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> schedule(@Nonnull Callable<V> command, long delay, @Nonnull TimeUnit unit)
V
- the return type of callable taskscommand
- the task to executedelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleAtFixedRate(@Nonnull Runnable command, long initialDelay, long period, @Nonnull TimeUnit unit)
initialDelay
then
initialDelay+period
, then initialDelay + 2 * period
,
and so on. If any execution of this task takes longer than its period,
then subsequent execution will be skipped. 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.V
- the result type of the returned ScheduledFuturecommand
- the task to executeinitialDelay
- the time to delay first executionperiod
- the period between successive executionsunit
- the time unit of the initialDelay and period parametersget()
method will throw an exception upon cancellationRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnMember(@Nonnull Runnable command, @Nonnull Member member, long delay, @Nonnull TimeUnit unit)
Member
.V
- the result type of the returned ScheduledFuturecommand
- the task to executemember
- the member to execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnMember(@Nonnull Callable<V> command, @Nonnull Member member, long delay, @Nonnull TimeUnit unit)
Member
.V
- the return type of callable taskscommand
- the task to executemember
- the member to execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnMemberAtFixedRate(@Nonnull Runnable command, @Nonnull Member member, long initialDelay, long period, @Nonnull TimeUnit unit)
Member
.
Executions will commence after initialDelay
then
initialDelay+period
, then initialDelay + 2 * period
, and
so on. If any execution of this task takes longer than its period, then
subsequent execution will be skipped. 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.V
- the result type of the returned ScheduledFuturecommand
- the task to executemember
- the member to execute the taskinitialDelay
- the time to delay first executionperiod
- the period between successive executionsunit
- the time unit of the initialDelay and period parametersget()
method will throw an exception upon cancellationRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnKeyOwner(@Nonnull Runnable command, @Nonnull Object key, long delay, @Nonnull TimeUnit unit)
V
- the result type of the returned ScheduledFuturecommand
- the task to executekey
- the key to identify the partition owner, which will execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnKeyOwner(@Nonnull Callable<V> command, @Nonnull Object key, long delay, @Nonnull TimeUnit unit)
V
- the return type of callable taskscommand
- the task to executekey
- the key to identify the partition owner, which will execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> scheduleOnKeyOwnerAtFixedRate(@Nonnull Runnable command, @Nonnull Object key, long initialDelay, long period, @Nonnull TimeUnit unit)
initialDelay
then initialDelay+period
, then
initialDelay + 2 * period
, and so on. If any execution of this
task takes longer than its period, then subsequent execution will be skipped.
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.V
- the result type of the returned ScheduledFuturecommand
- the task to executekey
- the key to identify the partition owner, which will execute the taskinitialDelay
- the time to delay first executionperiod
- the period between successive executionsunit
- the time unit of the initialDelay and period parametersget()
method will throw an exception upon cancellationRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnAllMembers(@Nonnull Runnable command, long delay, @Nonnull TimeUnit unit)
Member
s.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost. If a new member is added, the task will not get scheduled there automatically.
V
- the result type of the returned ScheduledFuturecommand
- the task to executedelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnAllMembers(@Nonnull Callable<V> command, long delay, @Nonnull TimeUnit unit)
Member
s.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost. If a new member is added, the task will not get scheduled there automatically.
V
- the return type of callable taskscommand
- the task to executedelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnAllMembersAtFixedRate(@Nonnull Runnable command, long initialDelay, long period, @Nonnull TimeUnit unit)
Member
s. Executions will commence after
initialDelay
then initialDelay+period
, then
initialDelay + 2 * period
, and so on. If any execution of this
task takes longer than its period, then subsequent execution will be
skipped. 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.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost. If a new member is added, the task will not get scheduled there automatically.
V
- the result type of the returned ScheduledFuturecommand
- the task to executeinitialDelay
- the time to delay first executionperiod
- the period between successive executionsunit
- the time unit of the initialDelay and period parametersget()
method will throw an exception upon cancellationRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnMembers(@Nonnull Runnable command, @Nonnull Collection<Member> members, long delay, @Nonnull TimeUnit unit)
Member
s given.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost.
V
- the result type of the returned ScheduledFuturecommand
- the task to executemembers
- the collections of members - where to execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnMembers(@Nonnull Callable<V> command, @Nonnull Collection<Member> members, long delay, @Nonnull TimeUnit unit)
Member
s given.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost.
V
- the return type of callable taskscommand
- the task to executemembers
- the collections of members - where to execute the taskdelay
- the time from now to delay executionunit
- the time unit of the delay parameterget()
method will return null
upon completionRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> Map<Member,IScheduledFuture<V>> scheduleOnMembersAtFixedRate(@Nonnull Runnable command, @Nonnull Collection<Member> members, long initialDelay, long period, @Nonnull TimeUnit unit)
Member
s given. Executions will commence after initialDelay
then initialDelay+period
, then initialDelay + 2 * period
,
and so on. If any execution of this task takes longer than its period,
then subsequent execution will be skipped. 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.
Note: In the event of Member leaving the cluster, for whatever reason, the task is lost.
V
- the result type of the returned ScheduledFuturecommand
- the task to executemembers
- the collections of members - where to execute the taskinitialDelay
- the time to delay first executionperiod
- the period between successive executionsunit
- the time unit of the initialDelay and period parametersget()
method will throw an exception upon cancellationRejectedExecutionException
- if the task cannot be scheduled for executionNullPointerException
- if command is null@Nonnull <V> IScheduledFuture<V> getScheduledFuture(@Nonnull ScheduledTaskHandler handler)
IScheduledFuture
from the given handler. This is
useful in case your member node or client from which the original
scheduling happened, went down, and now you want to access the
ScheduledFuture
again.V
- the result type of the returned ScheduledFuturehandler
- The handler of the task as found from IScheduledFuture.getHandler()
IScheduledFuture
from the given handler.@Nonnull <V> Map<Member,List<IScheduledFuture<V>>> getAllScheduledFutures()
Map
.V
- the result type of the returned ScheduledFutureMap
with Member
keys and a List of IScheduledFuture
found for this scheduler.void shutdown()
This method does not wait for previously submitted tasks to complete execution.
Copyright © 2023 Hazelcast, Inc.. All rights reserved.