import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* small demo to use CountDownLatch to wait for multiple threads to finish
*
* @author stones333
*
*/
public class FixedThreadPool {
private CountDownLatch countDownLatch=null;
/**
*
* @param count
*/
public void startParallelWork(int count) {
ExecutorService executorService = Executors.newFixedThreadPool( count );
countDownLatch=new CountDownLatch(count);
for (int i = 0; i < count; i++) {
Worker worker = new Worker(this.countDownLatch, i);
executorService.execute(worker);
}
executorService.shutdown();
}
/**
*
* @throws InterruptedException
*/
public void waitForThreadstoFinish() throws InterruptedException {
System.out.println("START WAITING");
if (countDownLatch!=null) {
countDownLatch.await();
}
System.out.println("DONE WAITING");
}
static public class Worker implements Runnable {
private CountDownLatch countDownLatch;
private int sleepTime;
/**
*
* @param countDownLatch
* @param sleepTime in second
*/
public Worker(CountDownLatch countDownLatch, int sleepTime) {
super();
this.countDownLatch = countDownLatch;
this.sleepTime = sleepTime;
}
@Override
public void run() {
System.out.println("Start-" + Thread.currentThread().getName());
try {
Thread.sleep( (long) sleepTime * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("End-" + Thread.currentThread().getName());
if (this.countDownLatch!=null) {
this.countDownLatch.countDown();
}
}
}
public static void main(String[] args) throws Exception {
FixedThreadPool fixedThreadPool = new FixedThreadPool();
fixedThreadPool.startParallelWork(10);
fixedThreadPool.waitForThreadstoFinish();
}
}
Monday, April 15, 2013
Simple Java Demo to show how to wait threads to finish
Here is a small program that illustrate how to use CountDownLatch to wait Java threads to finish. The example is self-explanatory.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment