import java.util.concurrent.*;
public class CountDownLatchTest {
public static void main(String[] args) {
final CountDownLatch order = new CountDownLatch(1);
final CountDownLatch answer = new CountDownLatch(8);
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(8, 8, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024));
// int length = 8;
for(int i=0; i<8; i++) {
final int ii = i;
Runnable runnable = new Runnable() {
public void run() {
try {
Thread.sleep(100);
System.out.println("选手" + ii + "准备就绪" + Thread.currentThread().getName());
order.await();
System.out.println("选手" + ii + "到达终点" + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
answer.countDown();
}
}
};
poolExecutor.execute(runnable);
}
try {
System.out.println("等待发令枪:" + Thread.currentThread().getName());
Thread.sleep(2000);
order.countDown();
System.out.println("等待所有选手到达终点:" + Thread.currentThread().getName());
answer.await();
System.out.println("所有选手已经到达!");
} catch (InterruptedException e) {
e.printStackTrace();
}
poolExecutor.shutdown();
}
}