Interface InterruptableJob
- All Superinterfaces:
Job
- All Known Implementing Classes:
Job
Job
s
that provide a mechanism for having
their execution interrupted. It is NOT a requirement for jobs to implement this interface - in
fact, for most people, none of their jobs will.
Interrupting a Job
is very analogous in concept and challenge to normal
interruption of a Thread
in Java.
The means of actually interrupting the Job must be implemented within the Job
itself (the interrupt()
method of this interface is simply a means for the scheduler
to inform the Job
that a request has been made for it to be interrupted). The
mechanism that your jobs use to interrupt themselves might vary between implementations. However
the principle idea in any implementation should be to have the body of the job's
execute(..)
periodically check some flag to see if an interruption has been requested, and
if the flag is set, somehow abort the performance of the rest of the job's work. An example of
interrupting a job can be found in the java source for the class
org.quartz.examples.DumbInterruptableJob
. It is legal to use some combination of
wait()
and notify()
synchronization within interrupt()
and
execute(..)
in order to have the interrupt()
method block until the
execute(..)
signals that it has noticed the set flag.
If the Job performs some form of blocking I/O or similar functions, you may want to consider
having the Job.execute(..)
method store a reference to the calling Thread
as a member variable. Then the Implementation of this interfaces interrupt()
method can call interrupt()
on that Thread. Before attempting this, make sure that
you fully understand what java.lang.Thread.interrupt()
does and doesn't do. Also
make sure that you clear the Job's member reference to the Thread when the execute(..) method
exits (preferably in a finally
block.
- Author:
- James House
- See Also:
-
Method Summary
-
Method Details
-
interrupt
void interrupt()Called by the
when a user interrupts theScheduler
Job
.
-