|
SSJ V. 1.2.5. |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectumontreal.iro.lecuyer.simprocs.AbstractSimProcess
public abstract class AbstractSimProcess
This abstract class provides process scheduling tools.
Each type of process should be defined as a subclass of the
class AbstractSimProcess, and must provide an implementation of the method
actions
which describes the life of a process of this class.
Whenever a process instance starts, its actions
method
begins executing.
Just like an event, a process must first be constructed, then scheduled.
Scheduling a process is equivalent to placing an event in the event list
that will start this process when
the simulation clock reaches the specified time.
The toString
method can be overridden to return
information about the process. This information will
be returned when formating the event list as a string, if the
process is delayed.
A process can be in one of the following states: INITIAL,
EXECUTING, DELAYED, SUSPENDED, and DEAD
.
At most one process can be in the EXECUTING state at
any given time, and when there is one, this executing process
(called the current process) is said to have control
and is executing one of the instructions of its actions
method.
A process that has been constructed but not yet scheduled is in
the INITIAL state.
A process is in the DELAYED state if there is a planned event
in the event list to activate it (give it control).
When a process is scheduled, it is placed in the DELAYED state.
It is in the SUSPENDED state if it is waiting to be reactivated
(i.e., obtain control) without having an event to do so in the event list.
A process can suspends itself by calling suspend
directly or
indirectly (e.g., by requesting a busy Resource
).
Usually, a SUSPENDED process must be reactivated by another process
or event via the resume
method.
A process in the DEAD state no longer exists.
It is important to note that when processes are used in a simulation, the simulation clock and event list must be initialized via SimProcess.init instead of Sim.init.
To construct new processes, the user needs to extend one of the two
subclasses of AbstractSimProcess. A simulation program should
always use the same process base class. The SimProcess
subclass
implements processes by using Java threads. This is the fastest
implementation. The
SimProcess
from
package simprocs.dsol uses the DSOL interpreter to simulate
processes in a single-threaded program, but it is much slower than the
multi-threaded implementation.
Field Summary | |
---|---|
static int |
DEAD
The process has terminated its execution. |
static int |
DELAYED
The process is not executing but has an event in the event list to reactivate it later on. |
static int |
EXECUTING
The process is the one currently executing its actions method. |
static int |
INITIAL
The process has been created but not yet scheduled. |
static int |
SUSPENDED
The process is not executing and will have to be reactivated by another process or event later on. |
Constructor Summary | |
---|---|
AbstractSimProcess()
Constructs a new process without scheduling it. |
Method Summary | |
---|---|
abstract void |
actions()
This is the method that is called when this process is executing. |
boolean |
cancel()
Cancel the activating event that was supposed to resume this process, and place the process in the SUSPENDED state. |
static AbstractSimProcess |
currentProcess()
Returns the process that is currently executing, if any. |
abstract void |
delay(double delay)
Suspends the execution of the currently executing process and schedules it to resume its execution in delay units of simulation time. |
double |
getDelay()
If the process is in the DELAYED state, returns the remaining time until the planned occurrence of its activating event. |
int |
getState()
Returns the state of the process. |
boolean |
isAlive()
Returns true if the process is alive, otherwise false. |
abstract void |
kill()
Terminates the life of this process and sets its state to DEAD, after canceling its activating event if there is one. |
void |
reschedule(double delay)
If the process is in the DELAYED state, removes it from the event list and reschedules it in delay units of time. |
void |
resume()
Places this process at the beginning of the event list to resume its execution. |
void |
schedule(double delay)
Schedules the process to start in delay time units. |
void |
scheduleNext()
Schedules this process to start at the current time, by placing it at the beginning of the event list. |
abstract void |
suspend()
This method can only be invoked for the EXECUTING or a DELAYED process. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final int INITIAL
public static final int EXECUTING
actions
method.
public static final int DELAYED
public static final int SUSPENDED
public static final int DEAD
Constructor Detail |
---|
public AbstractSimProcess()
Method Detail |
---|
public void schedule(double delay)
delay
- delay, in simulation time, before the process startspublic void scheduleNext()
public static AbstractSimProcess currentProcess()
public final boolean isAlive()
public int getState()
INITIAL
,
EXECUTING
, DELAYED
, SUSPENDED
, or
DEAD
.public double getDelay()
IllegalStateException
- if the process is not in DELAYED statepublic abstract void delay(double delay)
delay
- delay, in simulation time, before the process is resumedpublic void reschedule(double delay)
delay
(5.0)
at time 10.0, and another process invokes reschedule
(p, 6.2)
at time 13.5, then the process p will resume at time
13.5 + 6.2 = 19.7.
delay
- new delay, in simulation time units, before the process starts or is resumedpublic abstract void suspend()
public void resume()
public boolean cancel()
public abstract void kill()
public abstract void actions()
|
SSJ V. 1.2.5. |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |