Parallel (Apache Ant API)
Description: declaration: package: org.apache.tools.ant.taskdefs, class: Parallel

# Class Parallel

java.lang.Object
org.apache.tools.ant.ProjectComponent
org.apache.tools.ant.Task
org.apache.tools.ant.taskdefs.Parallel

All Implemented Interfaces:
  `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

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `Parallel.TaskList`
  Class which holds a list of tasks to execute

- ## Field Summary

  ### Fields inherited from class Task

  `target, taskName, taskType, wrapper`
  Modifier and Type
  Field
  Description
  `protected Target`
  `target`
  Deprecated.
  since 1.6.x.
  `protected String`
  `taskName`
  Deprecated.
  since 1.6.x.
  `protected String`
  `taskType`
  Deprecated.
  since 1.6.x.
  `protected RuntimeConfigurable`
  `wrapper`
  Deprecated.
  since 1.6.x.

  ### Fields inherited from class ProjectComponent

  `description, location, project`
  Modifier and Type
  Field
  Description
  `protected String`
  `description`
  Deprecated.
  since 1.6.x.
  `protected Location`
  `location`
  Deprecated.
  since 1.6.x.
  `protected Project`
  `project`
  Deprecated.
  since 1.6.x.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Parallel()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `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 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`
  Modifier and Type
  Method
  Description
  `final void`
  `bindToOwner(Task owner)`
  Bind a task to another; use this when configuring a newly created task to do work on behalf of another.
  `Target`
  `getOwningTarget()`
  Returns the container target of this task.
  `RuntimeConfigurable`
  `getRuntimeConfigurableWrapper()`
  Returns the wrapper used for runtime configuration.
  `String`
  `getTaskName()`
  Returns the name to use in logging messages.
  `String`
  `getTaskType()`
  Return the type of task.
  `protected RuntimeConfigurable`
  `getWrapper()`
  Return the runtime configurable structure for this task.
  `protected void`
  `handleErrorFlush(String output)`
  Handles an error line by logging it with the WARN priority.
  `protected void`
  `handleErrorOutput(String output)`
  Handles an error output by logging it with the WARN priority.
  `protected void`
  `handleFlush(String output)`
  Handles output by logging it with the INFO priority.
  `protected int`
  `handleInput(byte[] buffer, int offset, int length)`
  Handle an input request by this task.
  `protected void`
  `handleOutput(String output)`
  Handles output by logging it with the INFO priority.
  `void`
  `init()`
  Called by the project to let the task initialize properly.
  `protected final boolean`
  `isInvalid()`
  Has this task been marked invalid?
  `void`
  `log(String msg)`
  Logs a message with the default (INFO) priority.
  `void`
  `log(String msg, int msgLevel)`
  Logs a message with the given priority.
  `void`
  `log(String msg, Throwable t, int msgLevel)`
  Logs a message with the given priority.
  `void`
  `log(Throwable t, int msgLevel)`
  Logs a message with the given priority.
  `void`
  `maybeConfigure()`
  Configures this task - if it hasn't been done already.
  `final void`
  `perform()`
  Performs this task if it's still valid, or gets a replacement version and performs that otherwise.
  `void`
  `reconfigure()`
  Force the task to be reconfigured from its RuntimeConfigurable.
  `void`
  `setOwningTarget(Target target)`
  Sets the target container of this task.
  `void`
  `setRuntimeConfigurableWrapper(RuntimeConfigurable wrapper)`
  Sets the wrapper to be used for runtime configuration.
  `void`
  `setTaskName(String name)`
  Sets the name to use in logging messages.
  `void`
  `setTaskType(String type)`
  Sets the name with which the task has been invoked.

  ### Methods inherited from class ProjectComponent

  `clone, getDescription, getLocation, getProject, setDescription, setLocation, setProject`
  Modifier and Type
  Method
  Description
  `Object`
  `clone()`
  `String`
  `getDescription()`
  Returns the description of the current action.
  `Location`
  `getLocation()`
  Returns the file/location where this task was defined.
  `Project`
  `getProject()`
  Returns the project to which this component belongs.
  `void`
  `setDescription(String desc)`
  Sets a description of the current action.
  `void`
  `setLocation(Location location)`
  Sets the file/location where this task was defined.
  `void`
  `setProject(Project project)`
  Sets the project object of this component.

  ### Methods inherited from class Object

  `equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### Parallel

    public Parallel()

- ## Method Details

  - ### 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()`). Will overwrite the value set in 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 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.