javax.realtime
Class RealtimeThread

java.lang.Object
  extended byjava.lang.Thread
      extended byjavax.realtime.RealtimeThread
All Implemented Interfaces:
Runnable, Schedulable
Direct Known Subclasses:
NoHeapRealtimeThread

public class RealtimeThread
extends Thread
implements Schedulable

RealtimeThread extends Thread and includes classes and methods to get and set parameter objects, manage the execution of those threads with a ReleaseParameters type of PeriodicParameters , and waiting. A RealtimeThread object must be placed in a memory area such that thread logic may unexceptionally access instance variables and such that Java methods on Thread (e.g., enumerate and join) complete normally except where such execution would cause access violations. Parameters for constructors may be null . In such cases the default value will be the default value set for the particular type by the associated instance of Scheduler.

Author:
Angelo Corsaro, Morgan Deters

Field Summary
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
RealtimeThread()
          Creates a new RealtimeThread instance.
RealtimeThread(Runnable logic)
          Deprecated. off-spec
RealtimeThread(SchedulingParameters scheduling)
          Creates a new RealtimeThread instance with given SchedulingParameters.
RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release)
          Creates a new RealtimeThread instance with given SchedulingParameters and ReleaseParameters.
RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory, MemoryArea area, ProcessingGroupParameters group, Runnable logic)
          Creates a new RealtimeThread instance with the given characteristics and a Runnable.
 
Method Summary
 boolean addIfFeasible()
          Add to the feasibility of the already set scheduler if the resulting feasibility set is schedulable.
 boolean addToFeasibility()
          Inform the scheduler and cooperating facilities that the resource demands (as expressed in the associated instances of SchedulingParameters, ReleaseParameters, MemoryParameters, and ProcessingGroupParameters) of this instance of Schedulable will be considered in the feasibility analysis of the associated Scheduler until further notice.
static RealtimeThread currentRealtimeThread()
          Gets the currently running RealtimeThread.
 void deschedulePeriodic()
          Stop unblocking waitForNextPeriod() for a periodic schedulable object.
 int executionEligibility()
           
 MemoryArea getActiveMemoryArea()
           
static MemoryArea getCurrentMemoryArea()
          Return the instance of MemoryArea which is the current memory area for this.
static int getInitialMemoryAreaIndex()
          Memory area stacks include inherited stacks from parent threads.
 MemoryArea getMemoryArea()
          Get the initial memory area for this RealtimeThread (corresponding to the MemoryArea constructor argument); if this RealtimeThread was constructed with a null MemoryArea argument, this method returns a reference to the allocation context that was active when this RealtimeThread was constructed.
 int getMemoryAreaStackDepth_()
           
static int getMemoryAreaStackDepth()
          Get the size of the stack of MemoryArea instances to which this RealtimeThread has access.
 MemoryParameters getMemoryParameters()
          Get the MemoryParameters of this schedulable object.
static MemoryArea getOuterMemoryArea(int index)
          Get the instance of MemoryArea in the memory area stack at the index given.
 ProcessingGroupParameters getProcessingGroupParameters()
          Get the ProcessingGroupParameters of this schedulable object.
 ReleaseParameters getReleaseParameters()
          Get the ReleaseParameters of this schedulable object.
 Scheduler getScheduler()
          Get the Scheduler for this schedulable object.
 SchedulingParameters getSchedulingParameters()
          Get the SchedulingParameters for this schedulable object.
 void interrupt()
          Asynchronously interrupts this RealtimeThread with an AsynchronouslyInterruptedException, or, if this RealtimeThread is not in an interruptible context, sets up an AsynchronouslyInterruptedException to interrupt it when it enters an interruptible context.
 boolean removeFromFeasibility()
          Inform the scheduler and cooperating facilities that the resource demands, as expressed in the associated instances of SchedulingParameters, ReleaseParameters, MemoryParameters, and ProcessingGroupParameters, of this instance of Schedulable should no longer be considered in the feasibility analysis of the associated Scheduler.
 void run()
           
 void schedulePeriodic()
          Begin unblocking waitForNextPeriod() for a periodic thread.
 boolean setIfFeasible(ReleaseParameters release, MemoryParameters memory)
          Returns true if, after considering the values of the parameters, the task set would still be feasible.
 boolean setIfFeasible(ReleaseParameters release, MemoryParameters memory, ProcessingGroupParameters group)
          Returns true if, after considering the values of the parameters, the task set would still be feasible.
 boolean setIfFeasible(ReleaseParameters release, ProcessingGroupParameters group)
          Returns true if, after considering the values of the parameters, the task set would still be feasible.
 boolean setIfFeasible(SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory)
           
 boolean setIfFeasible(SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory, ProcessingGroupParameters group)
           
 void setMemoryParameters(MemoryParameters memory)
          Set the MemoryParameters for this schedulable object.
 boolean setMemoryParametersIfFeasible(MemoryParameters memory)
          Returns true if, after considering the value of the parameter, the task set would still be feasible.
 void setProcessingGroupParameters(ProcessingGroupParameters group)
          Set the ProcessingGroupParameters for this schedulable object.
 boolean setProcessingGroupParametersIfFeasible(ProcessingGroupParameters group)
          Set the ProcessingGroupParameters of this schedulable object only if the resulting task set is feasible.
 void setReleaseParameters(ReleaseParameters release)
          Set the ReleaseParametersfor this Schedulable object.
 boolean setReleaseParametersIfFeasible(ReleaseParameters release)
          Returns true if, after considering the value of the parameter, the task set would still be feasible.
 void setScheduler(Scheduler scheduler)
          Set the Scheduler for this schedulable object.
 void setScheduler(Scheduler scheduler, SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory, ProcessingGroupParameters group)
          Set the Scheduler for this schedulable object.
 void setSchedulingParameters(SchedulingParameters scheduling)
          Set the SchedulingParameters for this schedulable object only if the resulting task set is feasible.
 boolean setSchedulingParametersIfFeasible(SchedulingParameters scheduling)
          Set the SchedulingParameters for this schedulable object.
 void setupTSS()
           
static void sleep(AbsoluteTime time)
          An accurate timer with nanosecond granularity.
static void sleep(Clock clock, AbsoluteTime time)
          An accurate timer with nanosecond granularity.
static void sleep(Clock clock, HighResolutionTime time)
          Deprecated. use the approriate method (i.e. the one that has either RelativeTime or AbsoluteTime).
static void sleep(Clock clock, RelativeTime time)
          An accurate timer with nanosecond granularity.
static void sleep(HighResolutionTime time)
          An accurate timer with nanosecond granularity.
static void sleep(RelativeTime time)
          An accurate timer with nanosecond granularity.
 void start()
          Checks if the instance of RealtimeThread is startable and starts it if it is.
static boolean waitForNextPeriod()
          Used by threads that have a reference to a ReleaseParameters type of PeriodicParameters to block until the start of each period.
static void yield()
           
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, stop, stop, suspend, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RealtimeThread

public RealtimeThread()
Creates a new RealtimeThread instance. All parameter values are null.


RealtimeThread

public RealtimeThread(SchedulingParameters scheduling)
Creates a new RealtimeThread instance with given SchedulingParameters.

Parameters:
scheduling - the SchedulingParameters associated with this (and possibly other instances of RealtimeThread).

RealtimeThread

public RealtimeThread(SchedulingParameters scheduling,
                      ReleaseParameters release)
Creates a new RealtimeThread instance with given SchedulingParameters and ReleaseParameters.

Parameters:
scheduling - the SchedulingParameters associated with this (and possibly other instances of RealtimeThread)
release - the ReleaseParameters associated with this (and possibly other instances of RealtimeThread)

RealtimeThread

public RealtimeThread(SchedulingParameters scheduling,
                      ReleaseParameters release,
                      MemoryParameters memory,
                      MemoryArea area,
                      ProcessingGroupParameters group,
                      Runnable logic)
Creates a new RealtimeThread instance with the given characteristics and a Runnable.

Parameters:
scheduling - the SchedulingParameters associated with this (and possibly other instances of RealtimeThread).
release - the ReleaseParameters associated with this (and possibly other instances of RealtimeThread)
memory - the MemoryParameters associated with this (and possibly other instances of RealtimeThread)
area - the MemoryArea associated with this
group - the ProcessingGroupParameters associated with this (and possibly other instances of RealtimeThread)
logic - the logic for this thread.

RealtimeThread

public RealtimeThread(Runnable logic)
Deprecated. off-spec

Creates a new RealtimeThread instance. All parameter values are null, but the logic.

Parameters:
logic - a Runnable representing the thread logic.
Method Detail

currentRealtimeThread

public static RealtimeThread currentRealtimeThread()
Gets the currently running RealtimeThread.

Returns:
a RealtimeThread value representing the thread the is running now.
Throws:
ClassCastException - the current running thread is not a real-time thread

addIfFeasible

public boolean addIfFeasible()
Add to the feasibility of the already set scheduler if the resulting feasibility set is schedulable. If successful return true, if not return false. If there is not an assigned scheduler it will return false.

Specified by:
addIfFeasible in interface Schedulable
Returns:
If successful return true, if not return false. If there is not an assigned scheduler it will return false.

setIfFeasible

public boolean setIfFeasible(ReleaseParameters release,
                             MemoryParameters memory)
Returns true if, after considering the values of the parameters, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the values of the parameters, the task set would not be feasible. In this case the values of the parameters are not changed.

Specified by:
setIfFeasible in interface Schedulable
Parameters:
release - a ReleaseParameters value
memory - a MemoryParameters value
Returns:
true if the resulting system is feasible, false otherwise.

setIfFeasible

public boolean setIfFeasible(ReleaseParameters release,
                             MemoryParameters memory,
                             ProcessingGroupParameters group)
Returns true if, after considering the values of the parameters, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the values of the parameters, the task set would not be feasible. In this case the values of the parameters are not changed.

Specified by:
setIfFeasible in interface Schedulable
Parameters:
release - a ReleaseParameters value
memory - a MemoryParameters value
group - a ProcessingGroupParameters value
Returns:
true if the resulting system is feasible, false otherwise.

setIfFeasible

public boolean setIfFeasible(ReleaseParameters release,
                             ProcessingGroupParameters group)
Returns true if, after considering the values of the parameters, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the values of the parameters, the task set would not be feasible. In this case the values of the parameters are not changed.

Specified by:
setIfFeasible in interface Schedulable
Parameters:
release - a ReleaseParameters value
group - a ProcessingGroupParameters value
Returns:
true if the resulting system is feasible, false otherwise.

setIfFeasible

public boolean setIfFeasible(SchedulingParameters scheduling,
                             ReleaseParameters release,
                             MemoryParameters memory)
Specified by:
setIfFeasible in interface Schedulable

setIfFeasible

public boolean setIfFeasible(SchedulingParameters scheduling,
                             ReleaseParameters release,
                             MemoryParameters memory,
                             ProcessingGroupParameters group)
Specified by:
setIfFeasible in interface Schedulable

schedulePeriodic

public void schedulePeriodic()
Begin unblocking waitForNextPeriod() for a periodic thread. Typically used when a periodic schedulable object is in an overrun condition. The scheduler should recompute the schedule and perform admission control. If this does not have a type of PeriodicParameters as it ReleaseParameters nothing happens.


deschedulePeriodic

public void deschedulePeriodic()
Stop unblocking waitForNextPeriod() for a periodic schedulable object. If this does not have a type of PeriodicParameters as it ReleaseParameters nothing happens.


getCurrentMemoryArea

public static MemoryArea getCurrentMemoryArea()
Return the instance of MemoryArea which is the current memory area for this.

Returns:
a MemoryArea value

getInitialMemoryAreaIndex

public static int getInitialMemoryAreaIndex()
Memory area stacks include inherited stacks from parent threads. The inital memory area for the current RealtimeThread is the memory area given as a parameter to the constructor. This method returns the position in the memory area stack of that initial memory area.

Returns:
The index into the memory area stack of the inital memory area of the current RealtimeThread

getMemoryAreaStackDepth

public static int getMemoryAreaStackDepth()
Get the size of the stack of MemoryArea instances to which this RealtimeThread has access.

Returns:
The size of the stack of MemoryArea instances.

getOuterMemoryArea

public static MemoryArea getOuterMemoryArea(int index)
Get the instance of MemoryArea in the memory area stack at the index given. If the given index does not exist in the memory area scope stack then null is returned.

Parameters:
index - The offset into the memory area stack.
Returns:
The instance of MemoryArea at index or null if the given value is does not correspond to a position in the stack.

getMemoryArea

public MemoryArea getMemoryArea()
Get the initial memory area for this RealtimeThread (corresponding to the MemoryArea constructor argument); if this RealtimeThread was constructed with a null MemoryArea argument, this method returns a reference to the allocation context that was active when this RealtimeThread was constructed.

Returns:
the initial memory area of this RealtimeThread.
Since:
0.4.0

interrupt

public void interrupt()
Asynchronously interrupts this RealtimeThread with an AsynchronouslyInterruptedException, or, if this RealtimeThread is not in an interruptible context, sets up an AsynchronouslyInterruptedException to interrupt it when it enters an interruptible context.

The semantics of Thread.interrupt() are preserved.


addToFeasibility

public boolean addToFeasibility()
Inform the scheduler and cooperating facilities that the resource demands (as expressed in the associated instances of SchedulingParameters, ReleaseParameters, MemoryParameters, and ProcessingGroupParameters) of this instance of Schedulable will be considered in the feasibility analysis of the associated Scheduler until further notice. Whether the resulting system is feasible or not, the addition is completed.

Specified by:
addToFeasibility in interface Schedulable
Returns:
true If the resulting system is feasible.

getMemoryParameters

public MemoryParameters getMemoryParameters()
Get the MemoryParameters of this schedulable object.

Specified by:
getMemoryParameters in interface Schedulable
Returns:
a MemoryParameters value.

setMemoryParameters

public void setMemoryParameters(MemoryParameters memory)
Set the MemoryParameters for this schedulable object.

Specified by:
setMemoryParameters in interface Schedulable
Parameters:
memory - the MemoryParameters for this schedulable object.

setMemoryParametersIfFeasible

public boolean setMemoryParametersIfFeasible(MemoryParameters memory)
Returns true if, after considering the value of the parameter, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the value of the parameter, the task set would not be feasible. In this case the values of the parameters are not changed.

Specified by:
setMemoryParametersIfFeasible in interface Schedulable
Parameters:
memory - the MemoryParameters for this schedulable object.
Returns:
true if the requested change keeps the system feasible.

getProcessingGroupParameters

public ProcessingGroupParameters getProcessingGroupParameters()
Get the ProcessingGroupParameters of this schedulable object.

Specified by:
getProcessingGroupParameters in interface Schedulable
Returns:
a ProcessingGroupParameters value

setProcessingGroupParameters

public void setProcessingGroupParameters(ProcessingGroupParameters group)
Set the ProcessingGroupParameters for this schedulable object.

Specified by:
setProcessingGroupParameters in interface Schedulable
Parameters:
group - a ProcessingGroupParameters value

setProcessingGroupParametersIfFeasible

public boolean setProcessingGroupParametersIfFeasible(ProcessingGroupParameters group)
Set the ProcessingGroupParameters of this schedulable object only if the resulting task set is feasible.

Specified by:
setProcessingGroupParametersIfFeasible in interface Schedulable
Parameters:
group - a ProcessingGroupParameters value
Returns:
Returns true if, after considering the values of the parameters, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the values of the parameters, the task set would not be feasible. In this case the values of the parameters are not changed.

getReleaseParameters

public ReleaseParameters getReleaseParameters()
Get the ReleaseParameters of this schedulable object.

Specified by:
getReleaseParameters in interface Schedulable
Returns:
a ReleaseParameters value

setReleaseParameters

public void setReleaseParameters(ReleaseParameters release)
Set the ReleaseParametersfor this Schedulable object.

Specified by:
setReleaseParameters in interface Schedulable
Parameters:
release - a ReleaseParameters value

setReleaseParametersIfFeasible

public boolean setReleaseParametersIfFeasible(ReleaseParameters release)
Returns true if, after considering the value of the parameter, the task set would still be feasible. In this case the values of the parameters are changed. Returns false if, after considering the value of the parameter, the task set would not be feasible. In this case the values of the parameters are not changed. the resulting task set is feasible.

Specified by:
setReleaseParametersIfFeasible in interface Schedulable
Parameters:
release - a ReleaseParameters value

getScheduler

public Scheduler getScheduler()
Get the Scheduler for this schedulable object.

Specified by:
getScheduler in interface Schedulable
Returns:
a Scheduler value

setScheduler

public void setScheduler(Scheduler scheduler)
Set the Scheduler for this schedulable object.

Specified by:
setScheduler in interface Schedulable
Parameters:
scheduler - the scheduler.
Throws:
IllegalThreadStateException

setScheduler

public void setScheduler(Scheduler scheduler,
                         SchedulingParameters scheduling,
                         ReleaseParameters release,
                         MemoryParameters memory,
                         ProcessingGroupParameters group)
Set the Scheduler for this schedulable object.

Specified by:
setScheduler in interface Schedulable
Parameters:
scheduler - a Scheduler value
scheduling - a SchedulingParameters value
release - a ReleaseParameters value
memory - a MemoryParameters value
group - a ProcessingGroupParameters value
Throws:
IllegalThreadStateException - if an error occurs

getSchedulingParameters

public SchedulingParameters getSchedulingParameters()
Get the SchedulingParameters for this schedulable object.

Specified by:
getSchedulingParameters in interface Schedulable
Returns:
a SchedulingParameters value

setSchedulingParameters

public void setSchedulingParameters(SchedulingParameters scheduling)
Set the SchedulingParameters for this schedulable object only if the resulting task set is feasible.

Specified by:
setSchedulingParameters in interface Schedulable
Parameters:
scheduling - a SchedulingParameters value

setSchedulingParametersIfFeasible

public boolean setSchedulingParametersIfFeasible(SchedulingParameters scheduling)
Set the SchedulingParameters for this schedulable object.

Specified by:
setSchedulingParametersIfFeasible in interface Schedulable
Parameters:
scheduling - a SchedulingParameters value
Returns:
true if the change was feasible, false otherwise.

removeFromFeasibility

public boolean removeFromFeasibility()
Inform the scheduler and cooperating facilities that the resource demands, as expressed in the associated instances of SchedulingParameters, ReleaseParameters, MemoryParameters, and ProcessingGroupParameters, of this instance of Schedulable should no longer be considered in the feasibility analysis of the associated Scheduler. Whether the resulting system is feasible or not, the subtraction is completed.

Specified by:
removeFromFeasibility in interface Schedulable
Returns:
true If the resulting system is feasible.

sleep

public static void sleep(Clock clock,
                         HighResolutionTime time)
                  throws InterruptedException
Deprecated. use the approriate method (i.e. the one that has either RelativeTime or AbsoluteTime).

An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The sleep time may be relative or absolute. If relative, then the calling thread is blocked for the amount of time given by the parameter. If absolute, then the calling thread is blocked until the indicated point in time. If the given absolute time is before the current time, the call to sleep returns immediately.

Implementor Note: This method is ugly since it allows the application writer to pass a RationalTime, which does not make sense in this case.

Parameters:
clock - a Clock value
time - a HighResolutionTime value
Throws:
InterruptedException

sleep

public static void sleep(Clock clock,
                         RelativeTime time)
                  throws InterruptedException
An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The sleep time may be relative or absolute. If relative, then the calling thread is blocked for the amount of time given by the parameter. If absolute, then the calling thread is blocked until the indicated point in time. If the given absolute time is before the current time, the call to sleep returns immediately.

Parameters:
clock - a Clock value
time - a RelativeTime value
Throws:
InterruptedException

sleep

public static void sleep(Clock clock,
                         AbsoluteTime time)
                  throws InterruptedException
An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The sleep time may be relative or absolute. If relative, then the calling thread is blocked for the amount of time given by the parameter. If absolute, then the calling thread is blocked until the indicated point in time. If the given absolute time is before the current time, the call to sleep returns immediately.

Parameters:
clock - a Clock value
time - a AbsoluteTime value
Throws:
InterruptedException

sleep

public static void sleep(RelativeTime time)
                  throws InterruptedException
An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The calling thread is blocked for the amount of time given by the parameter.

Parameters:
time - a RelativeTime value
Throws:
InterruptedException

sleep

public static void sleep(AbsoluteTime time)
                  throws InterruptedException
An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The calling thread is blocked until the indicated point in time. If the given absolute time is before the current time, the call to sleep returns immediately.

Parameters:
time - an AbsoluteTime value
Throws:
InterruptedException

sleep

public static void sleep(HighResolutionTime time)
                  throws InterruptedException
An accurate timer with nanosecond granularity. The actual resolution available for the clock must be queried from somewhere else. The time base is the given Clock. The sleep time may be relative or absolute. If relative, then the calling thread is blocked for the amount of time given by the parameter. If absolute, then the calling thread is blocked until the indicated point in time. If the given absolute time is before the current time, the call to sleep returns immediately.
Implementor Note: This method is ugly since it allows the application writer to pass a RationalTime, which does not make sense in this case.

Parameters:
time - a HighResolutionTime value
Throws:
InterruptedException

start

public void start()
Checks if the instance of RealtimeThread is startable and starts it if it is.


run

public void run()
Specified by:
run in interface Runnable

waitForNextPeriod

public static boolean waitForNextPeriod()
Used by threads that have a reference to a ReleaseParameters type of PeriodicParameters to block until the start of each period. Periods start at either the start time in PeriodicParameters or when this.start() is called. This method will block until the start of the next period unless the thread is in either an overrun or deadline miss condition. If both overrun and miss handlers are null and the thread has overrun its cost or missed a deadline, this method will immediately return false once per overrun or deadline miss. It will then again block until the start of the next period (unless, of course, the thread has overrun or missed again). If either the overrun or deadline miss handlers are not null and the thread is in either an overrun or deadline miss condition, this method will block until the handler corrects the situation (possibly by calling schedulePeriodic()).

Returns:
a boolean value as described above
Throws:
IllegalThreadStateException - this does not have a reference to a ReleaseParameters type of PeriodicParameters

setupTSS

public void setupTSS()

getActiveMemoryArea

public MemoryArea getActiveMemoryArea()

getMemoryAreaStackDepth_

public int getMemoryAreaStackDepth_()

executionEligibility

public int executionEligibility()

yield

public static void yield()


jRate is developed and maintained by the jRate project development team.
Copyright (c) 2001-2006 Angelo Corsaro and Morgan Deters.