org.apache.tools.ant.taskdefs
Class Parallel

java.lang.Object
  extended by org.apache.tools.ant.ProjectComponent
      extended by org.apache.tools.ant.Task
          extended by org.apache.tools.ant.taskdefs.Parallel
All Implemented Interfaces:
java.lang.Cloneable, TaskContainer

public class Parallel
extends Task
implements TaskContainer

Executes the contained tasks in separate threads, continuing once all are completed.

New behavior allows for the ant script to specify a maximum number of threads that will be executed in parallel. One should be very careful about using the waitFor task when specifying threadCount as it can cause deadlocks if the number of threads is too small or if one of the nested tasks fails to execute completely. The task selection algorithm will insure that the tasks listed before a task have started before that task is started, but it will not insure a successful completion of those tasks or that those tasks will finish first (i.e. it's a classic race condition).

Since:
Ant 1.4

Nested Class Summary
static class Parallel.TaskList
          Class which holds a list of tasks to execute
 
Field Summary
 
Fields inherited from class org.apache.tools.ant.Task
target, taskName, taskType, wrapper
 
Fields inherited from class org.apache.tools.ant.ProjectComponent
description, location, project
 
Constructor Summary
Parallel()
           
 
Method Summary
 void addDaemons(Parallel.TaskList daemonTasks)
          Add a group of daemon threads
 void addTask(Task nestedTask)
          Add a nested task to execute in parallel.
 void execute()
          Execute the parallel tasks
 void setFailOnAny(boolean failOnAny)
          Control whether a failure in a nested task halts execution.
 void setPollInterval(int pollInterval)
          Interval to poll for completed threads when threadCount or threadsPerProcessor is specified.
 void setThreadCount(int numThreads)
          Statically determine the maximum number of tasks to execute simultaneously.
 void setThreadsPerProcessor(int numThreadsPerProcessor)
          Dynamically generates the number of threads to execute based on the number of available processors (via java.lang.Runtime.availableProcessors()).
 void setTimeout(long timeout)
          Sets the timeout on this set of tasks.
 
Methods inherited from class org.apache.tools.ant.Task
bindToOwner, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, log, log, maybeConfigure, perform, reconfigure, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType
 
Methods inherited from class org.apache.tools.ant.ProjectComponent
clone, getDescription, getLocation, getProject, setDescription, setLocation, setProject
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Parallel

public Parallel()
Method Detail

addDaemons

public void addDaemons(Parallel.TaskList daemonTasks)
Add a group of daemon threads

Parameters:
daemonTasks - The tasks to be executed as daemon.

setPollInterval

public void setPollInterval(int pollInterval)
Interval to poll for completed threads when threadCount or threadsPerProcessor is specified. Integer in milliseconds.; optional

Parameters:
pollInterval - New value of property pollInterval.

setFailOnAny

public void setFailOnAny(boolean failOnAny)
Control whether a failure in a nested task halts execution. Note that the task will complete but existing threads will continue to run - they are not stopped

Parameters:
failOnAny - if true any nested task failure causes parallel to complete.

addTask

public void addTask(Task nestedTask)
Add a nested task to execute in parallel.

Specified by:
addTask in interface TaskContainer
Parameters:
nestedTask - Nested task to be executed in parallel

setThreadsPerProcessor

public void setThreadsPerProcessor(int numThreadsPerProcessor)
Dynamically generates the number of threads to execute based on the number of available processors (via java.lang.Runtime.availableProcessors()). Requires a J2SE 1.4 VM, and it will overwrite the value set in threadCount. If used in a 1.1, 1.2, or 1.3 VM then the task will defer to threadCount.; optional

Parameters:
numThreadsPerProcessor - Number of threads to create per available processor.

setThreadCount

public void setThreadCount(int numThreads)
Statically determine the maximum number of tasks to execute simultaneously. If there are less tasks than threads then all will be executed at once, if there are more then only threadCount tasks will be executed at one time. If threadsPerProcessor is set and the JVM is at least a 1.4 VM then this value is ignored.; optional

Parameters:
numThreads - total number of threads.

setTimeout

public void setTimeout(long timeout)
Sets the timeout on this set of tasks. If the timeout is reached before the other threads complete, the execution of this task completes with an exception. Note that existing threads continue to run.

Parameters:
timeout - timeout in milliseconds.

execute

public void execute()
             throws BuildException
Execute the parallel tasks

Overrides:
execute in class Task
Throws:
BuildException - if any of the threads failed.