/*
* Created on May 5, 2004
*/
package cyrille.thread.test;
import java.text.DecimalFormat;
import junit.framework.TestCase;
import org.apache.commons.lang.math.RandomUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cyrille.thread.TimedRunnableSubOptimal;
import edu.emory.mathcs.backport.java.util.concurrent.ExecutorService;
import edu.emory.mathcs.backport.java.util.concurrent.Executors;
/**
* @author <a href="mailto:cleclerc@pobox.com">Cyrille Le Clerc </a>
*/
public class PooledExecutorWithTimedRunnableSubOptimalTest extends TestCase {
private final static Log log = LogFactory.getLog(PooledExecutorWithTimedRunnableSubOptimalTest.class);
public static void main(String[] args) {
junit.textui.TestRunner.run(PooledExecutorWithTimedRunnableSubOptimalTest.class);
}
public void testExecute() throws InterruptedException {
log.debug("> testExecute");
int maxThreads = 5;
ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
final int SHORT_TASK_DURATION = 300;
final int LONG_TASK_DURATION = SHORT_TASK_DURATION * 3;
int numberOfRunnables = 30;
long[] durationInMillis = new long[numberOfRunnables];
for (int i = 0; i < durationInMillis.length; i++) {
boolean isShortDuration = RandomUtils.nextBoolean();
if (isShortDuration) {
durationInMillis[i] = SHORT_TASK_DURATION;
} else {
durationInMillis[i] = LONG_TASK_DURATION;
}
}
for (int i = 0; i < numberOfRunnables; i++) {
Runnable runnable = new MockRunnable("job-" + new DecimalFormat("00").format(i), durationInMillis[i]);
Runnable timedRunnable = new TimedRunnableSubOptimal(runnable, durationInMillis[i]);
log.debug("add " + timedRunnable);
executor.execute(timedRunnable);
}
Thread.sleep(10 * 1000);
log.debug("< testExecute");
}
}