Timer
API.See: Description
Class | Description |
---|---|
ETimer |
This class provides an eBus request/reply interface on top of
the Java
Timer class. |
TimerReply |
This reply message is sent when the requested timer expires.
|
TimerReply.Builder | |
TimerRequest |
Send this request to schedule a timer task.
|
TimerRequest.Builder |
TimerRequest builder. |
Timer
API. This eBus interface is useful
if Java timer tasks are treated as events to be
delivered to an object rather than autonomous tasks. If
treated as tasks, then Timer
should be used.
Otherwise, the advantage in using eBus timer request/reply
messages is that it allows for uniform event processing. All
events are delivered as eBus messages.
The eBus timer request
allows for all six Timer
scheduling methods
to be accessed:
Timer.schedule(java.util.TimerTask, java.util.Date)
:
send the request
TimerRequest.builder()
.timerName("name")
.time(java.time.Instant)
.build()
to schedule a one-shot timer that expires on a given date
and time.
Timer.schedule(java.util.TimerTask, long)
:
send the request
TimerRequest.builder()
.timerName("name")
.delay(long)
.build()
to schedule a one-shot timer that expires after a
millisecond delay.
Timer.schedule(java.util.TimerTask, java.util.Date, long)
:
send the request
TimerRequest.builder()
.timerName("name")
.time(Instant)
.period(long)
.build()
to schedule a repeated fixed-delay execution
timer beginning at the specified date and time and
repeating at the millisecond period. The timer continues
running until the request is
canceled
.
Timer.scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long)
:
send the request
TimerRequest.builder()
.timerName("name")
.time(Instant)
.period(long)
.fixedRate(true)
.build()
to schedule a repeated fixed-rate execution,
beginning at the specified date and time and repeating at
the millisecond period. The timer continues running until
the request is
canceled
.
Timer.schedule(java.util.TimerTask, long, long)
:
send the request
TimerRequest.builder()
.timerName("name")
.delay(long)
.period(long)
.build()
to schedule a repeated fixed-delay execution,
beginning at the specified millisecond delay and repeating
at the millisecond period. The timer continues running
until the request is
canceled
.
Timer.scheduleAtFixedRate(java.util.TimerTask, long, long)
:
send the request
TimerRequest.builder()
.timerName("name")
.delay(long)
.period(long)
.fixedRate(true)
.build()
to schedule a repeated fixed-rate execution,
beginning at the specified millisecond delay and repeating
at the millisecond period. The timer continues running
until the request is
canceled
.
The TimerReply
message is sent when
the requested timer expires. If it is for a one-shot timer,
the reply final reply flag is set to true
. Otherwise,
a repeating timer will continue until the timer request is
canceled
.
The eBus timer service is only available to
ERequestor
objects in the same JVM.
An object cannot remotely access an eBus timer service.
ETimer
ETimer
must be running before any timer requests may
be placed. ETimer
is started by calling
ETimer.startETimer();
. ETimer
is stopped by
calling ETimer.stopETimer();
ETimer
Before timer requests may be placed, the ERequestor
must first subscribe to ETimer
. The example assumes
that this
object implements the
ERequestor
interface and
mTimerFeed
and mTimerReq
are class data
members.
ERequestFeed mTimerFeed;
ERequestFeed.ERequest mTimerReq;
mTimerFeed = ERequestFeed.open(this, ETimer.TIMER_KEY, EFeed.FeedScope.LOCAL_ONLY);
mTimerFeed.subscribe();
ETimer
requestsThe following code examples show how to make timer requests.
One time date timer: // Set a timer for the top of the next hour.
final Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
mTimerReq = mTimerFeed.request(new TimerRequest("hourly_timer", calendar.getTime()), this);
One time millisecond delay:
// Set a timer for 5 seconds into the future.
mTimerReq = mTimerFeed.request(new TimerRequest("five_seconds", 5000L), this);
Repeating timer for date, period, and fixed delay:
// Set a timer for the top of the next hour and every hour after that.
final Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
mTimerReq = mTimerFeed.request(new TimerRequest("hourly_timer", calendar.getTime(), 3600L, false), this);
Repeating timer for date, period, and fixed rate:
// Set a timer for the top of the next hour and every hour after that.
final Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
mTimerReq = mTimerFeed.request(new TimerRequest("hourly_timer", calendar.getTime(), 3600L, true), this);
Repeating timer for initial delay, period, and fixed delay:
// Set a timer to run five seconds into the future and every second after that.
mTimerReq = mTimerFeed.request(new TimerRequest("five_seconds", 5000L, 1000L, false), this);
Repeating timer for initial delay, period, and fixed rate:
// Set a timer to run five seconds into the future and every second after that.
mTimerReq = mTimerFeed.request(new TimerRequest("five_seconds", 5000L, 1000L, true), this);
ETimer
requests
A ETimer
request is canceled by calling
mTimerReq.close()
. A repeating timer request will
continue until either the requestor closes the request or
ETimer
is stopped. A one-time request discontinues
after the one reply is sent but may be canceled by the
requestor before then.
Copyright © 2001 - 2024. Charles W. Rapp. All rights reserved.