javax.realtime
Class RealtimeThread

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--javax.realtime.RealtimeThread
All Implemented Interfaces:
java.lang.Runnable, Schedulable
Direct Known Subclasses:
NoHeapRealtimeThread

public class RealtimeThread
extends java.lang.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 RealtimeThreadobject 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.


Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
RealtimeThread()
          Create a real-time thread.
RealtimeThread(SchedulingParameters scheduling)
          Create a real-time thread with the given SchedulingParameters.
RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release)
          Create a real-time thread with the given SchedulingParameters and ReleaseParameters.
RealtimeThread(SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memory, MemoryArea area, ProcessingGroupParameters group, java.lang.Runnable logic)
          Create a real-time thread 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()
          This will throw a ClassCastException if the current thread is not a RealtimeThread.
 void deschedulePeriodic()
          Stop unblocking waitForNextPeriod() for a periodic schedulable object.
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.
static int getMemoryAreaStackDepth()
          Get the size of the stack of MemoryArea instances to which this RealtimeThread has access.
 MemoryParameters getMemoryParameters()
          Return a reference to the MemoryParameters object.
static MemoryArea getOuterMemoryArea(int index)
          Get the instance of MemoryArea in the memory area stack at the index given.
 ProcessingGroupParameters getProcessingGroupParameters()
          Return a reference to the ProcessingGroupParameters object.
 ReleaseParameters getReleaseParameters()
          Returns a reference to the ReleaseParameters object.
 Scheduler getScheduler()
          Get the scheduler for this thread.
 SchedulingParameters getSchedulingParameters()
          Return a reference to the SchedulingParameters object.
 void interrupt()
          Throw the generic AsynchronouslyInterruptedException at this.
 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 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.
 void setMemoryParameters(MemoryParameters parameters)
          Set the reference to the MemoryParameters object.
 boolean setMemoryParametersIfFeasible(MemoryParameters memParam)
          Returns true if, after considering the value of the parameter, the task set would still be feasible.
 void setProcessingGroupParameters(ProcessingGroupParameters parameters)
          Set the reference to the ProcessingGroupParameters object.
 boolean setProcessingGroupParametersIfFeasible(ProcessingGroupParameters groupParameters)
          Returns true if, after considering the value of the parameter, the task set would still be feasible.
 void setReleaseParameters(ReleaseParameters parameters)
          Set the reference to the ReleaseParameters 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.
 void setScheduler(Scheduler scheduler, SchedulingParameters scheduling, ReleaseParameters release, MemoryParameters memoryParameters, ProcessingGroupParameters processingGroup)
          Set the scheduler.
 void setSchedulingParameters(SchedulingParameters scheduling)
          Set the reference to the SchedulingParameters object.
 boolean setSchedulingParametersIfFeasible(SchedulingParameters scheduling)
          Returns true if, after considering the value of the parameter, the task set would still be feasible.
static void sleep(Clock clock, HighResolutionTime time)
          An accurate timer with nanosecond granularity.
static void sleep(HighResolutionTime time)
          An accurate timer with nanosecond granularity.
 void start()
          Checks if the instance of RealtimeThread is startable and starts it if it is.
 boolean waitForNextPeriod()
          Used by threads that have a reference to a ReleaseParameters type of PeriodicParameters to block until the start of each period.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, run, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.lang.Runnable
run
 

Constructor Detail

RealtimeThread

public RealtimeThread()
Create a real-time thread. All parameter values are null.

RealtimeThread

public RealtimeThread(SchedulingParameters scheduling)
Create a real-time thread with the given SchedulingParameters.
Parameters:
scheduling - The SchedulingParameters associated with this (and possibly other RealtimeThread).

RealtimeThread

public RealtimeThread(SchedulingParameters scheduling,
                      ReleaseParameters release)
Create a real-time thread with the 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,
                      java.lang.Runnable logic)
Create a real-time thread 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 ).
Method Detail

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.

currentRealtimeThread

public static RealtimeThread currentRealtimeThread()
                                            throws java.lang.ClassCastException
This will throw a ClassCastException if the current thread is not a RealtimeThread.

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.

getMemoryParameters

public MemoryParameters getMemoryParameters()
Return a reference to the MemoryParameters object.
Specified by:
getMemoryParameters in interface Schedulable

getProcessingGroupParameters

public ProcessingGroupParameters getProcessingGroupParameters()
Return a reference to the ProcessingGroupParameters object.
Specified by:
getProcessingGroupParameters in interface Schedulable

getReleaseParameters

public ReleaseParameters getReleaseParameters()
Returns a reference to the ReleaseParameters object.
Specified by:
getReleaseParameters in interface Schedulable

getScheduler

public Scheduler getScheduler()
Get the scheduler for this thread.
Specified by:
getScheduler in interface Schedulable

getSchedulingParameters

public SchedulingParameters getSchedulingParameters()
Return a reference to the SchedulingParameters object.
Specified by:
getSchedulingParameters in interface Schedulable

interrupt

public void interrupt()
Throw the generic AsynchronouslyInterruptedException at this.
Overrides:
interrupt in class java.lang.Thread

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.

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.

setMemoryParameters

public void setMemoryParameters(MemoryParameters parameters)
                         throws java.lang.IllegalThreadStateException
Set the reference to the MemoryParameters object.
Specified by:
setMemoryParameters in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
memory - The MemoryParameters object.

setProcessingGroupParameters

public void setProcessingGroupParameters(ProcessingGroupParameters parameters)
Set the reference to the ProcessingGroupParameters object.
Specified by:
setProcessingGroupParameters in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
groupParameters - The ProcessingGroupParameters object.

setReleaseParameters

public void setReleaseParameters(ReleaseParameters parameters)
                          throws java.lang.IllegalThreadStateException
Set the reference to the ReleaseParameters object.
Specified by:
setReleaseParameters in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
release - The ReleaseParameters object.

setScheduler

public void setScheduler(Scheduler scheduler,
                         SchedulingParameters scheduling,
                         ReleaseParameters release,
                         MemoryParameters memoryParameters,
                         ProcessingGroupParameters processingGroup)
                  throws java.lang.IllegalThreadStateException
Set the scheduler. This is a reference to the scheduler that will manage the execution of this thread.
Specified by:
setScheduler in interface Schedulable
Throws:
java.lang.IllegalThreadStateException - Thrown when ((Thread.isAlive() && Not Blocked) == true). (Where blocked means waiting in Thread.wait(), Thread.join(), or Thread.sleep())

setScheduler

public void setScheduler(Scheduler scheduler)
                  throws java.lang.IllegalThreadStateException
Set the scheduler. This is a reference to the scheduler that will manage the execution of this thread.
Specified by:
setScheduler in interface Schedulable
Throws:
java.lang.IllegalThreadStateException - Thrown when ((Thread.isAlive() && Not Blocked) == true). (Where blocked means waiting in Thread.wait(), Thread.join(), or Thread.sleep())

setSchedulingParameters

public void setSchedulingParameters(SchedulingParameters scheduling)
                             throws java.lang.IllegalThreadStateException
Set the reference to the SchedulingParameters object.
Specified by:
setSchedulingParameters in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
scheduling - The SchedulingParameters object.

sleep

public static void sleep(Clock clock,
                         HighResolutionTime time)
                  throws java.lang.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.

sleep

public static void sleep(HighResolutionTime time)
                  throws java.lang.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 default 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.

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.

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.

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.

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

waitForNextPeriod

public boolean waitForNextPeriod()
                          throws java.lang.IllegalThreadStateException
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 waitForNextPeriod() 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 waitForNextPeriod() will block until the handler corrects the situation (possibly by calling schedulePeriodic()). waitForNextPeriod() throws IllegalThreadStateException if this does not have a reference to a ReleaseParameters type of PeriodicParameters.
Returns:
True when the thread is not in an overrun or deadline miss condition and unblocks at the start of the next period.

getCurrentMemoryArea

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

start

public void start()
Checks if the instance of RealtimeThread is startable and starts it if it is.
Overrides:
start in class java.lang.Thread

setProcessingGroupParametersIfFeasible

public boolean setProcessingGroupParametersIfFeasible(ProcessingGroupParameters groupParameters)
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:
setProcessingGroupParametersIfFeasible in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
groupParameters - The ProcessingGroupParameters object.

setSchedulingParametersIfFeasible

public boolean setSchedulingParametersIfFeasible(SchedulingParameters scheduling)
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:
setSchedulingParametersIfFeasible in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
scheduling - The SchedulingParameters object. If null nothing happens.

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.
Specified by:
setReleaseParametersIfFeasible in interface Schedulable
Following copied from interface: javax.realtime.Schedulable
Parameters:
release - The ReleaseParameters object. If null nothing happens.

setMemoryParametersIfFeasible

public boolean setMemoryParametersIfFeasible(MemoryParameters memParam)
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
Following copied from interface: javax.realtime.Schedulable
Parameters:
memory - The MemoryParameters object. If null nothing happens.

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.

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