package debug; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.testng.annotations.AfterClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParallelTest { private static final AtomicInteger concurrency = new AtomicInteger(); private static final AtomicInteger counter = new AtomicInteger(); @DataProvider( parallel = true, name = "dataProvider" ) public Iterator<Object[]> dataProvider() { List<Object[]> data = new ArrayList<Object[]>(); for ( int i = 0; i < 5000; i++ ) { data.add( new Object[]{ "ID_" + i } ); } return data.iterator(); } @Test( dataProvider = "dataProvider" ) public void testParallelDataProvider( String iterId ) throws Exception { int methodCount = counter.incrementAndGet(); int currentlyParallelCalls = concurrency.incrementAndGet(); if ( methodCount % 100 == 0 ) { System.out.println( iterId + ": CONCURRENCY=" + currentlyParallelCalls + "." ); } TimeUnit.MILLISECONDS.sleep( 20 ); concurrency.decrementAndGet(); } }