autohit.vm
Class VMContext

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--autohit.vm.VMContext

public class VMContext
extends java.lang.Thread

A VM context. It will wrap a VM in a thread and do all the thread-safe kinda stuff. A context will handle successive VM runs, so you can use them in a thread pool.

BE SURE to .start() this Thread BEFORE any other threads access its methods (particularly execute()). Failure to heed this warning COULD result in a race condition... :-)


Field Summary
protected  VM rVM
          A runnable VM.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
VMContext()
          Constructor.
 
Method Summary
 void blockTillExecute()
          Wait until someone calls our execute() method.
 boolean execute(VM aVM)
          Load and Execute a VM.
 int getState()
          A simple request for state.
 boolean kill()
          Kill this context.
 void run()
          Run the context
 int verifyState()
          Verify the state of the VM.
 boolean vmPause()
          Pause the vm.
 boolean vmResume()
          Resume the vm.
 boolean vmStop()
          Stop the vm.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

rVM

protected VM rVM
A runnable VM. This will be a fully implemented derived-class of VM.
Constructor Detail

VMContext

public VMContext()
Constructor.
Method Detail

execute

public boolean execute(VM aVM)
Load and Execute a VM. If a VM is already running, it will return false. Otherwise, it will return true. This method can be called by any thread.
Parameters:
aVM - A fully implimented derived-class of VM.
Returns:
true if successful and execution begun, false if another VM is already running.
See Also:
VM

vmPause

public boolean vmPause()
Pause the vm. This may be called by another thread. As with vmResume() and vmStop(), it posts a request to the VMContext. The context will not heed the request until the current VM.execute() is complete and the context has a chance to check for these requests.

There is no rendezvous; the method will not block. All successive requests count as the same request until the context services it. There is no guarentee on the timing of the service. The Context will not check for requests until AFTER the current instruction is complete. So, if the vm is executing a long wait instruction, it could indeed be some time before the request is serviced.

If you need to make sure that the request worked, then use the verifyState() method to get the definative state of the VM/Context.

As for the return value, "success" merely means that the request was successfully posted and not that the action was completed.

One last thaught: this is not a robust OS implimentation of a thread context. You might want to restrict calls to vmPause() and vmResume() to a single external thread. Multiple threads might get confused if they don't cooperate...

Returns:
true is successful. false if no vm is running or it is already paused.
See Also:
VM

vmResume

public boolean vmResume()
Resume the vm.

See the notes for the pause() method.

Returns:
true is successful. false if no vm is paused or it is already running.
See Also:
VM

vmStop

public boolean vmStop()
Stop the vm. This will kill it permanently, so be careful.

See the notes for the pause() method.

Returns:
true is successful. false if no vm is running or paused.
See Also:
VM

kill

public boolean kill()
Kill this context. This is a request, so it may not happen immeadiately. Once it does, it is irrevocable as the Thread run() method will be allowed to return...

See the notes for the pause() method.

Returns:
always returns true.
See Also:
VM

verifyState

public int verifyState()
Verify the state of the VM. It will report a VM state value as defined in the VM class--VM.State_*. This will be the authorative state, as this method blocks until the VM has chance to clear requests and unblock it.

(And, never EVER call this method from within THIS thread. You'll almost certainly deadlock it.)

The following describes each state:

         STATE_NEW          = VM is loaded bu not started
         STATE_RUNNING      = VM is actively running.
         STATE_PAUSED       = VM is paused.
         STATE_DONE         = VM finished execution.
                              This is rare, as the VM will
                              be automatically unloaded when
                              finished.
         STATE_NO_VM        = No VM is loaded into this context.
  
Returns:
a VM.State_* value.
See Also:
VM

getState

public int getState()
A simple request for state. It may or not be stale be the time the calling thread gets it. If you msut have THE AUTHORATIVE state, then call verifyState()
Returns:
a VM.State_* value.
See Also:
VM

run

public void run()
Run the context
Overrides:
run in class java.lang.Thread

blockTillExecute

public void blockTillExecute()
Wait until someone calls our execute() method.