|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--java.lang.Throwable | +--java.lang.Exception | +--java.lang.InterruptedException | +--javax.realtime.AsynchronouslyInterruptedException
An special exception that is thrown in response to an attempt to asynchronously
transfer the locus of control of a RealtimeThread
.
When a method is declared with AsynchronouslyInterruptedException
in its throws
clause the platform is expected to asynchronously throw this
exception if RealtimeThread.interrupt()
is called while the
method is executing, or if such an interrupt is pending any
time control returns to the method. The interrupt is not thrown
while any methods it invokes are executing, unless they are, in turn,
declared to throw the exception. This is intended to allow long-running
computations to be terminated without the overhead or
latency of polling with Thread.interrupted()
.
The throws AsynchronouslyInterruptedException
clause
is a marker on a stack frame which allows a method to be
statically marked as asynchronously interruptible. Only methods that are
marked this way can be interrupted.
When Thread.interrupt()
, RealtimeThread.interrupt()
,
or this.fire()
is called,
the AsynchronouslyInterruptedException
is compared against any currently
pending AsynchronouslyInterruptedException
on the thread. If there is none, or if the depth of the AsynchronouslyInterruptedException
is less than the currently pending AsynchronouslyInterruptedException
-- i.e., it is targeted
at a less deeply nested method call -- it becomes the currently
pending interrupt. Otherwise, it is discarded.
If the current method is interruptible, the exception is thrown on the thread.
Otherwise, it just remains pending until control returns to an interruptible
method, at which point the AsynchronouslyInterruptedException
is thrown. When an interrupt is
caught, the caller should invoke the happened()
method
on the AsynchronouslyInterruptedException
in which it is
interested to see if it matches the pending AsynchronouslyInterruptedException
.
If so, the pending AsynchronouslyInterruptedException
is cleared from the thread. Otherwise,
it will continue to propagate outward.
Thread.interrupt()
and RealtimeThread.interrupt()
generate a system available generic AsynchronouslyInterruptedException
which will always propagate outward through interruptible methods until the
generic AsynchronouslyInterruptedException
is identified and stopped.
Other sources (e.g., this.fire()
and Timed
)
will generate
a specific instance of AsynchronouslyInterruptedException
which
applications can identify and thus limit propagation.
Constructor Summary | |
AsynchronouslyInterruptedException()
Create an instance of AsynchronouslyInterruptedException . |
Method Summary | |
boolean |
disable()
Defer the throwing of this exception. |
boolean |
doInterruptible(Interruptible logic)
Execute the run() method of the given Interruptible . |
boolean |
enable()
Enable the throwing of this exception. |
boolean |
fire()
Make this exception the current exception if doInterruptible() has
been invoked and not completed. |
static AsynchronouslyInterruptedException |
getGeneric()
Return the system generic AsynchronouslyInterruptedException , which is
generated when RealtimeThread.interrupt() is invoked. |
boolean |
happened(boolean propagate)
Used with an instance of this exception to see if the current exception is this exception. |
boolean |
isEnabled()
Query the enabled status of this exception. |
static void |
propagate()
Cause the pending exception to continue up the stack. |
Methods inherited from class java.lang.Throwable |
fillInStackTrace, getLocalizedMessage, getMessage, printStackTrace, printStackTrace, printStackTrace, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
public AsynchronouslyInterruptedException()
AsynchronouslyInterruptedException
.Method Detail |
public static AsynchronouslyInterruptedException getGeneric()
AsynchronouslyInterruptedException
, which is
generated when RealtimeThread.interrupt()
is invoked.public boolean enable()
public boolean disable()
interrupt()
is
called when this exception is disabled, the exception is put in
pending state. The exception will be thrown if this exception is
subsequently enabled. This is valid only within a
call to doInterruptible()
. Otherwise it returns false and does nothing.public boolean isEnabled()
public boolean fire()
doInterruptible()
has
been invoked and not completed.doInterruptible()
, then false is returned with no other effect.
False is also returned if there is already a current doInterruptible()
or if disable()
has been called.public boolean doInterruptible(Interruptible logic)
run()
method of the given Interruptible
.
This method may be on the stack in exactly one RealtimeThread
.
An attempt to invoke this method in a thread while it is on the
stack of another or the same thread will cause an
immediate return with a value of false.code
- An instance of an Interruptible
whose run()
method will be
called.doInterruptible
has not completed.public boolean happened(boolean propagate)
propagate
- Propagate the exception if true and this exception
is not the current one. If false, then the state of this is set to
nonpending (i.e., it will stop propagating).public static void propagate()
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |