Interface TimerTask
When a timer is created, it is associated with a timer task. When the timer
becomes triggered -- that is, when the time comes to do the timed actions --
the timer calls the timer task's action()
method. The timer passes a
reference to itself as an argument to the timer task's action()
method.
The first thing the timer task must do in the action()
method is
check whether the timer is still triggered. If it is, the action()
method can perform its processing. But if the timer is no longer triggered,
the action()
method must return without doing anything.
This is to deal with a race condition that can arise when multiple threads
are involved. Suppose the timer thread triggers the timer, the timer calls
the timer task's action()
method, and the action()
method
synchronizes on the object that will perform the action. Suppose the
action()
method blocks because some other thread is already
executing a synchronized method on this object. Suppose the other thread
cancels the timer. Here is the race condition: the timer was canceled just as
it was triggered but before it could do the timed actions. When the other
thread returns, the action()
method unblocks and proceeds to
execute. The action()
method must check whether the timer got
canceled between the time when the action()
method was called and
the time when the action()
method started executing. If the
action()
method doesn't do this check, it may erroneously perform
the timeout actions despite the timer cancellation.
Classes Timer, TimerTask, and TimerThread provide capabilities similar to classes java.util.Timer and java.util.TimerTask. Unlike the latter, they also provide the ability to stop and restart a timer and the ability to deal with race conditions in multithreaded programs.
- Version:
- 27-Sep-2002
- Author:
- Alan Kaminsky
-
Method Summary
-
Method Details
-
action
Perform this timer task's timed actions. The Timer that was triggered is passed in as an argument.The
action()
method must check whether the timer is still triggered. If it is, theaction()
method can perform its processing. But if the timer is no longer triggered, theaction()
method must return without doing anything.- Parameters:
theTimer
- Timer that was triggered.
-