package winstone;
import junit.framework.TestCase;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author Kohsuke Kawaguchi
*/
public class BoundedExecutorServiceDriver extends TestCase {
public static void main(String[] args) throws Exception {
ExecutorService es = new ThreadPoolExecutor(2, Integer.MAX_VALUE,
5L, TimeUnit.SECONDS, // idle thread will only hang around for 60 secs
new SynchronousQueue<Runnable>(),
new ThreadFactory() {
private int threadIndex;
public synchronized Thread newThread(Runnable r) {
String threadName = Launcher.RESOURCES.getString(
"RequestHandlerThread.ThreadName", "" + (++threadIndex));
// allocate a thread to run on this object
Thread thread = new Thread(r, threadName);
thread.setDaemon(true);
return thread;
}
});
BoundedExecutorService bes = new BoundedExecutorService(es,5);
for (int i=0; i<20; i++) {
final int n = i;
bes.submit(new Runnable() {
public void run() {
try {
System.out.println("#"+n+" started");
Thread.sleep(1000);
System.out.println("#"+n+" stopped");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread.sleep(100);
}
Thread.sleep(100000);
}
}