Package 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`, `org.apache.jmeter.testelement.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

## Nested Class Summary

## Nested classes/interfaces inherited from interface org.apache.jmeter.testelement.TestElement

`org.apache.jmeter.testelement.TestElement.Companion`

## Field Summary

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

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

`COMMENTS, Companion, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

## Constructor Summary

Constructors
Constructor
Description
`AbstractThreadGroup()`

## Method Summary

Modifier and Type
Method
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(org.apache.jmeter.testelement.TestElement child)`
Add a test element.
`final boolean`
`addTestElementOnce(org.apache.jmeter.testelement.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.
`@NotNull org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends AbstractThreadGroup,? extends org.apache.jmeter.threads.AbstractThreadGroupSchema>`
`getProps()`
`Controller`
`getSamplerController()`
Get the sampler controller.
`org.apache.jmeter.threads.AbstractThreadGroupSchema`
`getSchema()`
`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, getPropertyOrNull, 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.threads.JMeterThreadMonitor

`threadFinished`

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

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

## Field Details

### 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 Details

### AbstractThreadGroup

public AbstractThreadGroup()

## Method Details

### getSchema

public org.apache.jmeter.threads.AbstractThreadGroupSchema getSchema()

Specified by:
  `getSchema` in interface `org.apache.jmeter.testelement.TestElement`

### getProps

@NotNull public @NotNull org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends AbstractThreadGroup,? extends org.apache.jmeter.threads.AbstractThreadGroupSchema> getProps()

Specified by:
  `getProps` in interface `org.apache.jmeter.testelement.TestElement`

### 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(org.apache.jmeter.testelement.TestElement child)
Add a test element.

Specified by:
  `addTestElement` in interface `org.apache.jmeter.testelement.TestElement`
Overrides:
  `addTestElement` in class `AbstractTestElement`
Parameters:
  `child` - the test element to add.

### addTestElementOnce

public final boolean addTestElementOnce(org.apache.jmeter.testelement.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