edu.rice.cs.plt.concurrent
Class ProcessTaskController<R>

java.lang.Object
  extended by edu.rice.cs.plt.concurrent.TaskController<R>
      extended by edu.rice.cs.plt.concurrent.ProcessTaskController<R>
All Implemented Interfaces:
ResolvingThunk<R>, Thunk<R>, Future<R>

public class ProcessTaskController<R>
extends TaskController<R>

A TaskController that executes a simple task in another Java process. The task and its result must be serializable. If the task completes successfully, the remote process is allowed to run indefinitely (the process terminates automatically for simple tasks, but if additional non-daemon threads are spawned, users are responsible for cleaning up the process). If the task is unsuccessful, the remote process is immediately destroyed. A local task, scheduled by an Executor, manages the startup of and exchange of information with the remote process. This local task is submitted (via Executor.execute(java.lang.Runnable)) when start() is invoked (if the executor blocks, so will start()); its status is changed to "running" when it actually begins executing; if canceled in the interim, the status will still be "paused" until the task begins its scheduled execution, but no process will ever by spawned.


Nested Class Summary
 
Nested classes/interfaces inherited from class edu.rice.cs.plt.concurrent.TaskController
TaskController.CanceledStartingState, TaskController.CanceledState, TaskController.CancelingState, TaskController.CleanlyFinishedState, TaskController.ComputingState, TaskController.ExecutionExceptionState, TaskController.FinishedState, TaskController.FreshStartingState, TaskController.FreshState, TaskController.InternalExceptionState, TaskController.RunningState, TaskController.StartingState, TaskController.State, TaskController.Status, TaskController.WaitingState
 
Field Summary
 
Fields inherited from class edu.rice.cs.plt.concurrent.TaskController
state
 
Constructor Summary
ProcessTaskController(JVMBuilder jvmBuilder, Executor executor, Thunk<? extends R> task)
          Create, but do not start, a ProcessTaskController.
ProcessTaskController(JVMBuilder jvmBuilder, Executor executor, Thunk<? extends R> task, Runnable1<? super Process> onExit)
          Create, but do not start, a ProcessTaskController.
 
Method Summary
protected  void discard()
          Clean up after the task has completed.
protected  void doStart()
          Begin computation and call TaskController.started().
protected  void doStop()
          Terminate computation and call TaskController.stopped().
 
Methods inherited from class edu.rice.cs.plt.concurrent.TaskController
attemptGet, attemptGet, cancel, cancel, finishedCleanly, finishedWithImplementationException, finishedWithTaskException, finishListeners, get, get, get, hasValue, isCanceled, isCancelled, isDone, isResolved, runningState, start, started, status, stopped, value
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ProcessTaskController

public ProcessTaskController(JVMBuilder jvmBuilder,
                             Executor executor,
                             Thunk<? extends R> task)
Create, but do not start, a ProcessTaskController.

Parameters:
jvmBuilder - A JVMBuilder for the remote process; must have this class, task's class, and their dependencies on its class path.
executor - An executor for scheduling a local task that manages interaction with the remote process. The local task completes once a value has been returned.
task - A computation to perform; the task and its return value must be serializable.

ProcessTaskController

public ProcessTaskController(JVMBuilder jvmBuilder,
                             Executor executor,
                             Thunk<? extends R> task,
                             Runnable1<? super Process> onExit)
Create, but do not start, a ProcessTaskController. This constructor allows code to be executed when the remote process terminates: if the computation terminates successfully, onExit will be run after the process finishes (which may occur in the indefinite future if the task spawns additional non-daemon threads).

Parameters:
jvmBuilder - A JVMBuilder for the remote process; must have this class, task's class, and their dependencies on its class path.
executor - An executor for scheduling a local task that manages interaction with the remote process. If onExit is defined, the local task completes after the process terminates and onExit has run; otherwise, the local task completes once a value has been returned.
task - A computation to perform; the task and its return value must be serializable.
onExit - An action to perform when the process has quit, or null for no action.
Method Detail

doStart

protected void doStart()
Description copied from class: TaskController
Begin computation and call TaskController.started(). If starting does not occur immediately (for example, blocking occurs first), the started() call may occur in a different thread.

Specified by:
doStart in class TaskController<R>

doStop

protected void doStop()
Description copied from class: TaskController
Terminate computation and call TaskController.stopped(). Never called before started() has been invoked. If termination does not occur immediately (for example, blocking occurs first), the stopped() call may occur in a different thread.

Specified by:
doStop in class TaskController<R>

discard

protected void discard()
Description copied from class: TaskController
Clean up after the task has completed. Called whenever the task enters a canceled or finished state (for example, when finishedCleanly() has been called, or when cancel() is invoked on a PAUSED controller). By default, does nothing, but can be overridden to close connections or throw away unnecessary objects. (Where TaskControllers live far beyond their computation life span (as simple wrappers for a value), this allows objects related to the computation to be garbage-collected in the interim.)

Overrides:
discard in class TaskController<R>