Package org.apache.jmeter.threads

# Class ThreadGroup

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

All Implemented Interfaces:
  `Serializable`, `Cloneable`, `Controller`, `Searchable`, `org.apache.jmeter.testelement.TestElement`, `JMeterThreadMonitor`, `TestCompilerHelper`

Direct Known Subclasses:
  `PostThreadGroup`, `SetupThreadGroup`

public class ThreadGroup extends AbstractThreadGroup
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 String`
  `DELAY`
  Scheduler start delay, overrides start time
  `static final String`
  `DELAYED_START`
  Whether thread startup is delayed until required
  `static final String`
  `DURATION`
  Scheduler duration, overrides end time
  `static final String`
  `RAMP_TIME`
  Ramp-up time
  `static final String`
  `SCHEDULER`
  Whether scheduler is being used

  ### Fields inherited from class org.apache.jmeter.threads.AbstractThreadGroup

  `DEFAULT_THREAD_STOP_TIMEOUT, IS_SAME_USER_ON_NEXT_ITERATION, MAIN_CONTROLLER, NUM_THREADS, ON_SAMPLE_ERROR, ON_SAMPLE_ERROR_CONTINUE, ON_SAMPLE_ERROR_START_NEXT_LOOP, ON_SAMPLE_ERROR_STOPTEST, ON_SAMPLE_ERROR_STOPTEST_NOW, ON_SAMPLE_ERROR_STOPTHREAD`

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

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

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ThreadGroup()`
  No-arg constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `JMeterThread`
  `addNewThread(int delay, StandardJMeterEngine engine)`
  Add a new `JMeterThread` to this `ThreadGroup` for engine
  `long`
  `getDelay()`
  Get the startup delay
  `long`
  `getDuration()`
  Get the desired duration of the thread group test run
  `@NotNull org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends ThreadGroup,? extends org.apache.jmeter.threads.ThreadGroupSchema>`
  `getProps()`
  `int`
  `getRampUp()`
  Get the ramp-up value.
  `boolean`
  `getScheduler()`
  Get whether scheduler is being used
  `org.apache.jmeter.threads.ThreadGroupSchema`
  `getSchema()`
  `int`
  `numberOfActiveThreads()`
  `void`
  `setDelay(long delay)`
  Set the startup delay
  `void`
  `setDuration(long duration)`
  Set the desired duration of the thread group test run
  `void`
  `setRampUp(int rampUp)`
  Set the ramp-up value.
  `void`
  `setScheduler(boolean scheduler)`
  Set whether scheduler is being used
  `void`
  `start(int groupNum, ListenerNotifier notifier, ListedHashTree threadGroupTree, StandardJMeterEngine engine)`
  Start the `ThreadGroup`
  `void`
  `stop()`
  This is a clean shutdown.
  `boolean`
  `stopThread(String threadName, boolean now)`
  Stop thread called threadName: stop JMeter thread interrupt JMeter thread interrupt underlying thread
  `void`
  `tellThreadsToStop()`
  This is an immediate stop interrupting: current running threads current running samplers For each thread, invoke: `JMeterThread.stop()` - set stop flag `JMeterThread.interrupt()` - interrupt sampler `Thread.interrupt()` - interrupt JVM thread
  `void`
  `tellThreadsToStop(boolean now)`
  `void`
  `threadFinished(JMeterThread thread)`
  Called by JMeterThread when it finishes
  `boolean`
  `verifyThreadsStopped()`
  `void`
  `waitThreadsStopped()`
  Wait for all Group Threads to stop

  ### Methods inherited from class org.apache.jmeter.threads.AbstractThreadGroup

  `addIterationListener, addTestElement, addTestElementOnce, breakThreadLoop, cloneTree, getNumberOfThreads, getNumThreads, getOnErrorStartNextLoop, getOnErrorStopTest, getOnErrorStopTestNow, getOnErrorStopThread, getSamplerController, initialize, isDone, isSameUserOnNextIteration, makeThread, next, removeIterationListener, setIsSameUserOnNextIteration, setNumThreads, setSamplerController, startNextLoop, triggerEndOfLoop`

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

  - ### RAMP_TIME

    public static final String RAMP_TIME
    Ramp-up time
    See Also:
      - Constant Field Values

  - ### DELAYED_START

    public static final String DELAYED_START
    Whether thread startup is delayed until required
    See Also:
      - Constant Field Values

  - ### SCHEDULER

    public static final String SCHEDULER
    Whether scheduler is being used
    See Also:
      - Constant Field Values

  - ### DURATION

    public static final String DURATION
    Scheduler duration, overrides end time
    See Also:
      - Constant Field Values

  - ### DELAY

    public static final String DELAY
    Scheduler start delay, overrides start time
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### ThreadGroup

    public ThreadGroup()
    No-arg constructor.

- ## Method Details

  - ### getSchema

    public org.apache.jmeter.threads.ThreadGroupSchema getSchema()
    Specified by:
      `getSchema` in interface `org.apache.jmeter.testelement.TestElement`
    Overrides:
      `getSchema` in class `AbstractThreadGroup`

  - ### getProps

    @NotNull public @NotNull org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends ThreadGroup,? extends org.apache.jmeter.threads.ThreadGroupSchema> getProps()
    Specified by:
      `getProps` in interface `org.apache.jmeter.testelement.TestElement`
    Overrides:
      `getProps` in class `AbstractThreadGroup`

  - ### setScheduler

    public void setScheduler(boolean scheduler)
    Set whether scheduler is being used
    Parameters:
      `scheduler` - true is scheduler is to be used

  - ### getScheduler

    public boolean getScheduler()
    Get whether scheduler is being used
    Returns:
      true if scheduler is being used

  - ### getDuration

    public long getDuration()
    Get the desired duration of the thread group test run
    Returns:
      the duration (in secs)

  - ### setDuration

    public void setDuration(long duration)
    Set the desired duration of the thread group test run
    Parameters:
      `duration` - in seconds

  - ### getDelay

    public long getDelay()
    Get the startup delay
    Returns:
      the delay (in secs)

  - ### setDelay

    public void setDelay(long delay)
    Set the startup delay
    Parameters:
      `delay` - in seconds

  - ### setRampUp

    public void setRampUp(int rampUp)
    Set the ramp-up value.
    Parameters:
      `rampUp` - the ramp-up value.

  - ### getRampUp

    public int getRampUp()
    Get the ramp-up value.
    Returns:
      the ramp-up value.

  - ### start

    public void start(int groupNum, ListenerNotifier notifier, ListedHashTree threadGroupTree, StandardJMeterEngine engine)
    Description copied from class: `AbstractThreadGroup`
    Start the `ThreadGroup`
    Specified by:
      `start` in class `AbstractThreadGroup`
    Parameters:
      `groupNum` - group number
      `notifier` - `ListenerNotifier`
      `threadGroupTree` - `ListedHashTree`
      `engine` - `StandardJMeterEngine`

  - ### addNewThread

    public JMeterThread addNewThread(int delay, StandardJMeterEngine engine)
    Description copied from class: `AbstractThreadGroup`
    Add a new `JMeterThread` to this `ThreadGroup` for engine
    Specified by:
      `addNewThread` in class `AbstractThreadGroup`
    Parameters:
      `delay` - Delay in milliseconds
      `engine` - `StandardJMeterEngine`
    Returns:
      `JMeterThread`

  - ### stopThread

    public boolean stopThread(String threadName, boolean now)
    Stop thread called threadName:
    1. stop JMeter thread
    2. interrupt JMeter thread
    3. interrupt underlying thread
    Specified by:
      `stopThread` in class `AbstractThreadGroup`
    Parameters:
      `threadName` - String thread name
      `now` - boolean for stop
    Returns:
      true if thread stopped

  - ### threadFinished

    public void threadFinished(JMeterThread thread)
    Called by JMeterThread when it finishes

  - ### tellThreadsToStop

    public void tellThreadsToStop(boolean now)

  - ### tellThreadsToStop

    public void tellThreadsToStop()
    This is an immediate stop interrupting:
    - current running threads
    - current running samplers
    For each thread, invoke:
    - `JMeterThread.stop()` - set stop flag
    - `JMeterThread.interrupt()` - interrupt sampler
    - `Thread.interrupt()` - interrupt JVM thread
    Specified by:
      `tellThreadsToStop` in class `AbstractThreadGroup`

  - ### stop

    public void stop()
    This is a clean shutdown. For each thread, invoke:
    - `JMeterThread.stop()` - set stop flag
    Specified by:
      `stop` in class `AbstractThreadGroup`

  - ### numberOfActiveThreads

    public int numberOfActiveThreads()
    Specified by:
      `numberOfActiveThreads` in class `AbstractThreadGroup`
    Returns:
      number of active threads

  - ### verifyThreadsStopped

    public boolean verifyThreadsStopped()
    Specified by:
      `verifyThreadsStopped` in class `AbstractThreadGroup`
    Returns:
      boolean true if all threads stopped

  - ### waitThreadsStopped

    public void waitThreadsStopped()
    Wait for all Group Threads to stop
    Specified by:
      `waitThreadsStopped` in class `AbstractThreadGroup`