org.apache.tools.ant.util
Class WorkerAnt

java.lang.Object
  extended by java.lang.Thread
      extended by org.apache.tools.ant.util.WorkerAnt
All Implemented Interfaces:
java.lang.Runnable

public class WorkerAnt
extends java.lang.Thread

A worker ant executes a single task in a background thread. After the run, any exception thrown is turned into a buildexception, which can be rethrown, the finished attribute is set, then notifyAll() is called, so that anyone waiting on the same notify object gets woken up.

This class is effectively a superset of Parallel.TaskRunnable

Since:
Ant 1.8

Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
static java.lang.String ERROR_NO_TASK
          Error message if invoked with no task
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
WorkerAnt(Task task)
          Create the worker, using the worker as the notification point.
WorkerAnt(Task task, java.lang.Object notify)
          Create the worker.
 
Method Summary
 BuildException getBuildException()
          Get any build exception.
 java.lang.Throwable getException()
          Get whatever was thrown, which may or may not be a buildException.
 Task getTask()
          Get the task
 boolean isFinished()
          Query the task/thread for being finished.
 void rethrowAnyBuildException()
          Raise an exception if one was caught
 void run()
          Run the task, which is skipped if null.
 void waitUntilFinished(long timeout)
          Block on the notify object and so wait until the thread is finished.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ERROR_NO_TASK

public static final java.lang.String ERROR_NO_TASK
Error message if invoked with no task

See Also:
Constant Field Values
Constructor Detail

WorkerAnt

public WorkerAnt(Task task,
                 java.lang.Object notify)
Create the worker.

This does not start the thread, merely configures it.

Parameters:
task - the task
notify - what to notify

WorkerAnt

public WorkerAnt(Task task)
Create the worker, using the worker as the notification point.

This does not start the thread, merely configures it.

Parameters:
task - the task
Method Detail

getBuildException

public BuildException getBuildException()
Get any build exception. This would seem to be oversynchronised, but know that Java pre-1.5 can reorder volatile access. The synchronized attribute is to force an ordering.

Returns:
the exception or null

getException

public java.lang.Throwable getException()
Get whatever was thrown, which may or may not be a buildException. Assertion: getException() instanceof BuildException <=> getBuildException()==getException()

Returns:
the exception.

getTask

public Task getTask()
Get the task

Returns:
the task

isFinished

public boolean isFinished()
Query the task/thread for being finished. This would seem to be oversynchronised, but know that Java pre-1.5 can reorder volatile access. The synchronized attribute is to force an ordering.

Returns:
true if the task is finished.

waitUntilFinished

public void waitUntilFinished(long timeout)
                       throws java.lang.InterruptedException
Block on the notify object and so wait until the thread is finished.

Parameters:
timeout - timeout in milliseconds
Throws:
java.lang.InterruptedException - if the execution was interrupted

rethrowAnyBuildException

public void rethrowAnyBuildException()
Raise an exception if one was caught

Throws:
BuildException - if one has been picked up

run

public void run()
Run the task, which is skipped if null. When invoked again, the task is re-run.

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread