import java.util.concurrent.*;
public class CountDownLatchDemo {
public static void main(String[] args) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 3, 30, TimeUnit.SECONDS, new ArrayBlockingQueue(4), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
CountDownLatch countDownLatch = new CountDownLatch(3);
CountDownLatchRunnable runnable1 = new CountDownLatchRunnable(countDownLatch);
CountDownLatchRunnable runnable2 = new CountDownLatchRunnable(countDownLatch);
CountDownLatchRunnable runnable3 = new CountDownLatchRunnable(countDownLatch);
threadPoolExecutor.execute(runnable1);
threadPoolExecutor.execute(runnable2);
threadPoolExecutor.execute(runnable3);
try {
countDownLatch.await(10, TimeUnit.SECONDS);
threadPoolExecutor.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main out.");
}
static class CountDownLatchRunnable implements Runnable {
private CountDownLatch countDownLatch;
public CountDownLatchRunnable(CountDownLatch countDownLatch){
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
System.out.println("countDownLatch in.");
Thread.sleep(5000);
System.out.println("countDownLatch out.");
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}