org.apache.tools.ant.taskdefs

## Class Parallel

- java.lang.Object
- - org.apache.tools.ant.ProjectComponent
  - - org.apache.tools.ant.Task
    - - 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

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `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

    Constructors
    Constructor and Description
    `Parallel()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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 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()`). 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.