| career | drupal | java | mac | mysql | perl | scala | uml | unix  

JMeter example source code file (

This example JMeter source code file ( is included in the "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - JMeter tags/keywords

abstracttestelement, interruptedexception, interruptedexception, io, logger, object, object, override, serializable, serializable, synctimer, synctimer, testbean, timer

The JMeter source code

 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.

package org.apache.jmeter.timers;


import org.apache.jmeter.testbeans.TestBean;
import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

 * The purpose of the SyncTimer is to block threads until X number of threads
 * have been blocked, and then they are all released at once. A SyncTimer can
 * thus create large instant loads at various points of the test plan.
public class SyncTimer extends AbstractTestElement implements Timer, Serializable, TestBean {
    private static final long serialVersionUID = 2;

    private static final Logger log = LoggingManager.getLoggerForClass();

    // Must be an Object so it will be shared between threads
    private int[] timerCounter = new int[] { 0 };

    private transient Object sync = new Object();

    private int groupSize;

    // Ensure transient object is created by the server
    private Object readResolve(){
        sync = new Object();
        return this;

     * @return Returns the numThreads.
    public int getGroupSize() {
        return groupSize;

     * @param numThreads
     *            The numThreads to set.
    public void setGroupSize(int numThreads) {
        this.groupSize = numThreads;

     * {@inheritDoc}
    public long delay() {
        synchronized (sync) {
            final int groupSz = getGroupSize();
            final int count = timerCounter[0];
            if (
                (groupSz == 0 && count >= JMeterContextService.getNumberOfThreads())
                (groupSz > 0 && count >= groupSz)
                ) {
            } else {
                try {
                } catch (InterruptedException e) {
        return 0;

     * We have to control the cloning process because we need some cross-thread
     * communication if our synctimers are to be able to determine when to block
     * and when to release.
    public Object clone() {
        SyncTimer newTimer = (SyncTimer) super.clone();
        newTimer.timerCounter = timerCounter;
        newTimer.sync = sync;
        return newTimer;


Other JMeter examples (source code examples)

Here is a short list of links related to this JMeter source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller


new blog posts


Copyright 1998-2021 Alvin Alexander,
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.