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, 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

### Field Summary

Fields
`static String` `DELAY` Scheduler start delay, overrides start time
`static String` `DELAYED_START` Whether thread startup is delayed until required
`static String` `DURATION` Scheduler duration, overrides end time
`static String` `RAMP_TIME` Ramp-up time
`static String` `SCHEDULER` Whether scheduler is being used

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

`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, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

### Constructor Summary

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

### Method Summary

All Methods Instance Methods Concrete Methods
`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
`int` `getRampUp()` Get the ramp-up value.
`boolean` `getScheduler()` Get whether scheduler is being used
`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, getNumberOfThreads, getNumThreads, getOnErrorStartNextLoop, getOnErrorStopTest, getOnErrorStopTestNow, getOnErrorStopThread, getSamplerController, initialize, isDone, isSameUserOnNextIteration, 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, 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`

### Field Detail

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

#### ThreadGroup

    public ThreadGroup()

No-arg constructor.

### Method Detail

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