org.apache.jmeter.threads

## Class AbstractThreadGroup

- java.lang.Object
- - org.apache.jmeter.testelement.AbstractTestElement
  - - org.apache.jmeter.threads.AbstractThreadGroup

- All Implemented Interfaces:
    Serializable, Cloneable, Controller, Searchable, TestElement, JMeterThreadMonitor, TestCompilerHelper
  Direct Known Subclasses:
    ThreadGroup

      public abstract class AbstractThreadGroup
      extends AbstractTestElement
      implements Serializable, Controller, JMeterThreadMonitor, TestCompilerHelper

  ThreadGroup holds the settings for a JMeter thread group. This class is intended to be ThreadSafe.
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static Duration` | `DEFAULT_THREAD_STOP_TIMEOUT`
    `static String` | `IS_SAME_USER_ON_NEXT_ITERATION` The same user or different users
    `static String` | `MAIN_CONTROLLER`
    `static String` | `NUM_THREADS` Number of threads in the thread group
    `static String` | `ON_SAMPLE_ERROR` Action to be taken when a Sampler error occurs
    `static String` | `ON_SAMPLE_ERROR_CONTINUE` Continue, i.e.
    `static String` | `ON_SAMPLE_ERROR_START_NEXT_LOOP` Start next loop for current thread if sampler error occurs
    `static String` | `ON_SAMPLE_ERROR_STOPTEST` Stop test (all threads) if sampler error occurs, the entire test is stopped at the end of any current samples
    `static String` | `ON_SAMPLE_ERROR_STOPTEST_NOW` Stop test NOW (all threads) if sampler error occurs, the entire test is stopped abruptly.
    `static String` | `ON_SAMPLE_ERROR_STOPTHREAD` Stop current thread if sampler error occurs

    - ### Fields inherited from interface org.apache.jmeter.testelement.TestElement

      `COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractThreadGroup()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addIterationListener(LoopIterationListener lis)` Controllers have to notify listeners of when they begin an iteration through their sub-elements.
    `abstract JMeterThread` | `addNewThread(int delay, StandardJMeterEngine engine)` Add a new `JMeterThread` to this `ThreadGroup` for engine
    `void` | `addTestElement(TestElement child)` Add a test element.
    `boolean` | `addTestElementOnce(TestElement child)` Add child test element only if it has not already been added.
    `void` | `breakThreadLoop()`
    `static ListedHashTree` | `cloneTree(ListedHashTree tree)`
    `int` | `getNumberOfThreads()` Get the number of active threads
    `int` | `getNumThreads()` Get the number of threads.
    `boolean` | `getOnErrorStartNextLoop()` Check if a sampler error should cause thread to start next loop.
    `boolean` | `getOnErrorStopTest()` Check if a sampler error should cause test to stop.
    `boolean` | `getOnErrorStopTestNow()` Check if a sampler error should cause test to stop now.
    `boolean` | `getOnErrorStopThread()` Check if a sampler error should cause thread to stop.
    `Controller` | `getSamplerController()` Get the sampler controller.
    `void` | `initialize()` Called to initialize a controller at the beginning of a test iteration.
    `boolean` | `isDone()` Indicates whether the Controller is done delivering Samplers for the rest of the test.
    `boolean` | `isSameUserOnNextIteration()` Get kind of user: true means same user running multiple iterations false means a different user for each iteration
    `protected JMeterThread` | `makeThread(StandardJMeterEngine engine, JMeterThreadMonitor monitor, ListenerNotifier notifier, int groupNumber, int threadNumber, ListedHashTree threadGroupTree, JMeterVariables variables)` Create `JMeterThread`.
    `Sampler` | `next()` Delivers the next Sampler or null
    `abstract int` | `numberOfActiveThreads()`
    `void` | `removeIterationListener(LoopIterationListener iterationListener)` Unregister IterationListener
    `void` | `setIsSameUserOnNextIteration(boolean isSameUserOnNextIteration)` Set the kind of user
    `void` | `setNumThreads(int numThreads)` Set the total number of threads to start
    `void` | `setSamplerController(LoopController c)` Set the sampler controller.
    `abstract void` | `start(int groupCount, ListenerNotifier notifier, ListedHashTree threadGroupTree, StandardJMeterEngine engine)` Start the `ThreadGroup`
    `void` | `startNextLoop()` Start next iteration after an error
    `abstract void` | `stop()` This gracefully stops threads of Group
    `abstract boolean` | `stopThread(String threadName, boolean now)` Hard or graceful stop depending on now flag
    `abstract void` | `tellThreadsToStop()` This immediately stop threads of Group by interrupting them.
    `void` | `triggerEndOfLoop()` NOOP
    `abstract boolean` | `verifyThreadsStopped()`
    `abstract void` | `waitThreadsStopped()` Wait for all Group Threads to stop after a graceful stop

    - ### Methods inherited from class org.apache.jmeter.testelement.AbstractTestElement

      `addPropertiesValues, addProperty, addProperty, canRemove, clear, clearTemporary, clearTestElementChildren, clone, emptyTemporary, equals, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getSearchableTokens, getThreadContext, getThreadName, hashCode, isEnabled, isRunningVersion, isTemporary, logProperties, mergeIn, propertyIterator, recoverRunningVersion, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse, traverseCollection, traverseMap, traverseProperty`

    - ### Methods inherited from class java.lang.Object

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

    - ### Methods inherited from interface org.apache.jmeter.testelement.TestElement

      `canRemove, clear, clearTestElementChildren, clone, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getThreadContext, getThreadName, isEnabled, isRunningVersion, isTemporary, propertyIterator, recoverRunningVersion, removed, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse`

    - ### Methods inherited from interface org.apache.jmeter.threads.JMeterThreadMonitor

      `threadFinished`

- - ### Field Detail

    - #### DEFAULT_THREAD_STOP_TIMEOUT

          public static final Duration DEFAULT_THREAD_STOP_TIMEOUT

    - #### ON_SAMPLE_ERROR

          public static final String ON_SAMPLE_ERROR

      Action to be taken when a Sampler error occurs
      See Also:
        Constant Field Values

    - #### ON_SAMPLE_ERROR_CONTINUE

          public static final String ON_SAMPLE_ERROR_CONTINUE

      Continue, i.e. ignore sampler errors
      See Also:
        Constant Field Values

    - #### ON_SAMPLE_ERROR_START_NEXT_LOOP

          public static final String ON_SAMPLE_ERROR_START_NEXT_LOOP

      Start next loop for current thread if sampler error occurs
      See Also:
        Constant Field Values

    - #### ON_SAMPLE_ERROR_STOPTHREAD

          public static final String ON_SAMPLE_ERROR_STOPTHREAD

      Stop current thread if sampler error occurs
      See Also:
        Constant Field Values

    - #### ON_SAMPLE_ERROR_STOPTEST

          public static final String ON_SAMPLE_ERROR_STOPTEST

      Stop test (all threads) if sampler error occurs, the entire test is stopped at the end of any current samples
      See Also:
        Constant Field Values

    - #### ON_SAMPLE_ERROR_STOPTEST_NOW

          public static final String ON_SAMPLE_ERROR_STOPTEST_NOW

      Stop test NOW (all threads) if sampler error occurs, the entire test is stopped abruptly. Any current samplers are interrupted if possible.
      See Also:
        Constant Field Values

    - #### NUM_THREADS

          public static final String NUM_THREADS

      Number of threads in the thread group
      See Also:
        Constant Field Values

    - #### MAIN_CONTROLLER

          public static final String MAIN_CONTROLLER

      See Also:
        Constant Field Values

    - #### IS_SAME_USER_ON_NEXT_ITERATION

          public static final String IS_SAME_USER_ON_NEXT_ITERATION

      The same user or different users
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AbstractThreadGroup

          public AbstractThreadGroup()

  - ### Method Detail

    - #### isDone

          public boolean isDone()

      Indicates whether the Controller is done delivering Samplers for the rest of the test. When the top-level controller returns true to JMeterThread, the thread is complete.
      Specified by:
        `isDone` in interface `Controller`
      Returns:
        boolean

    - #### next

          public Sampler next()

      Delivers the next Sampler or null
      Specified by:
        `next` in interface `Controller`
      Returns:
        org.apache.jmeter.samplers.Sampler or null

    - #### getSamplerController

          public Controller getSamplerController()

      Get the sampler controller.
      Returns:
        the sampler controller.

    - #### setSamplerController

          public void setSamplerController(LoopController c)

      Set the sampler controller.
      Parameters:
        `c` - the sampler controller.

    - #### addTestElement

          public void addTestElement(TestElement child)

      Add a test element.
      Specified by:
        `addTestElement` in interface `TestElement`
      Overrides:
        `addTestElement` in class `AbstractTestElement`
      Parameters:
        `child` - the test element to add.

    - #### addTestElementOnce

          public final boolean addTestElementOnce(TestElement child)

      Add child test element only if it has not already been added.

      Only for use by TestCompiler.

      Specified by:
        `addTestElementOnce` in interface `TestCompilerHelper`
      Parameters:
        `child` - the `TestElement` to be added
      Returns:
        `true` if the child was added

    - #### addIterationListener

          public void addIterationListener(LoopIterationListener lis)

      Controllers have to notify listeners of when they begin an iteration through their sub-elements.
      Specified by:
        `addIterationListener` in interface `Controller`
      Parameters:
        `lis` - The `LoopIterationListener` to add

    - #### removeIterationListener

          public void removeIterationListener(LoopIterationListener iterationListener)

      Unregister IterationListener
      Specified by:
        `removeIterationListener` in interface `Controller`
      Parameters:
        `iterationListener` - `LoopIterationListener`

    - #### initialize

          public void initialize()

      Called to initialize a controller at the beginning of a test iteration.
      Specified by:
        `initialize` in interface `Controller`

    - #### startNextLoop

          public void startNextLoop()

      Start next iteration after an error

    - #### triggerEndOfLoop

          public void triggerEndOfLoop()

      NOOP
      Specified by:
        `triggerEndOfLoop` in interface `Controller`

    - #### setNumThreads

          public void setNumThreads(int numThreads)

      Set the total number of threads to start
      Parameters:
        `numThreads` - the number of threads.

    - #### getNumberOfThreads

          public int getNumberOfThreads()

      Get the number of active threads
      Returns:
        the number of active threads

    - #### getNumThreads

          public int getNumThreads()

      Get the number of threads.
      Returns:
        the number of threads.

    - #### getOnErrorStartNextLoop

          public boolean getOnErrorStartNextLoop()

      Check if a sampler error should cause thread to start next loop.
      Returns:
        true if thread should start next loop

    - #### getOnErrorStopThread

          public boolean getOnErrorStopThread()

      Check if a sampler error should cause thread to stop.
      Returns:
        true if thread should stop

    - #### getOnErrorStopTest

          public boolean getOnErrorStopTest()

      Check if a sampler error should cause test to stop.
      Returns:
        true if test (all threads) should stop

    - #### getOnErrorStopTestNow

          public boolean getOnErrorStopTestNow()

      Check if a sampler error should cause test to stop now.
      Returns:
        true if test (all threads) should stop immediately

    - #### stopThread

          public abstract boolean stopThread(String threadName,
                                             boolean now)

      Hard or graceful stop depending on now flag
      Parameters:
        `threadName` - String thread name
        `now` - if true interrupt `Thread`
      Returns:
        boolean true if stop succeeded

    - #### numberOfActiveThreads

          public abstract int numberOfActiveThreads()

      Returns:
        int number of active threads

    - #### start

          public abstract void start(int groupCount,
                                     ListenerNotifier notifier,
                                     ListedHashTree threadGroupTree,
                                     StandardJMeterEngine engine)

      Start the `ThreadGroup`
      Parameters:
        `groupCount` - group number
        `notifier` - `ListenerNotifier`
        `threadGroupTree` - `ListedHashTree`
        `engine` - `StandardJMeterEngine`

    - #### addNewThread

          public abstract JMeterThread addNewThread(int delay,
                                                    StandardJMeterEngine engine)

      Add a new `JMeterThread` to this `ThreadGroup` for engine
      Parameters:
        `delay` - Delay in milliseconds
        `engine` - `StandardJMeterEngine`
      Returns:
        `JMeterThread`

    - #### verifyThreadsStopped

          public abstract boolean verifyThreadsStopped()

      Returns:
        true if threads were correctly stopped

    - #### waitThreadsStopped

          public abstract void waitThreadsStopped()

      Wait for all Group Threads to stop after a graceful stop

    - #### tellThreadsToStop

          public abstract void tellThreadsToStop()

      This immediately stop threads of Group by interrupting them. It differs from `stop()` by being a hard stop

    - #### stop

          public abstract void stop()

      This gracefully stops threads of Group

    - #### breakThreadLoop

          public void breakThreadLoop()

    - #### setIsSameUserOnNextIteration

          public void setIsSameUserOnNextIteration(boolean isSameUserOnNextIteration)

      Set the kind of user
      Parameters:
        `isSameUserOnNextIteration` - true is the same user on next iteration of loop false is a different user on next iteration of loop

    - #### isSameUserOnNextIteration

          public boolean isSameUserOnNextIteration()

      Get kind of user:
      - true means same user running multiple iterations
      - false means a different user for each iteration
      Returns:
        the kind of user.

    - #### makeThread

          @API(status=EXPERIMENTAL,
               since="5.5")
          protected JMeterThread makeThread(StandardJMeterEngine engine,
                                                                                        JMeterThreadMonitor monitor,
                                                                                        ListenerNotifier notifier,
                                                                                        int groupNumber,
                                                                                        int threadNumber,
                                                                                        ListedHashTree threadGroupTree,
                                                                                        JMeterVariables variables)

      Create `JMeterThread`. Note: the input tree is not cloned.
      Parameters:
        `engine` - `StandardJMeterEngine`
        `monitor` - `JMeterThreadMonitor`
        `notifier` - `ListenerNotifier`
        `groupNumber` - thread group number
        `threadNumber` - int thread number
        `threadGroupTree` - `ListedHashTree`
        `variables` - initial variables
      Returns:
        `JMeterThread`

    - #### cloneTree

          @API(status=EXPERIMENTAL,
               since="5.5")
          public static ListedHashTree cloneTree(ListedHashTree tree)

      Parameters:
        `tree` - `ListedHashTree`
      Returns:
        a clone of tree

Copyright © 1998-2022 Apache Software Foundation. All Rights Reserved.