public class Thread002 {
private static final int nThreads = 10;//线程数
private static int tasks = 20;//任务数
private static Executor executor = Executors.newFixedThreadPool(nThreads);
private static final CountDownLatch countDownLatch = new CountDownLatch(tasks );
@Test
public void test() throws InterruptedException {
System.out.println(">>>>>>>>>>>>start<<<<<<<<<<<<<"+Thread.currentThread().getName());
for (int i=0; i<tasks; i++){
TimeUnit.SECONDS.sleep(1);
executor.execute(() -> {
System.out.println(Thread.currentThread().getName()+">>>>>执行");
countDownLatch.countDown();
});
}
countDownLatch.await(1, TimeUnit.SECONDS);
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>执行完毕");
}
public static void main(String[] args) throws InterruptedException {
System.out.println(">>>>>>>>>>>>start<<<<<<<<<<<<<"+Thread.currentThread().getName());
for (int i=0; i<tasks; i++){
TimeUnit.SECONDS.sleep(1);
System.out.println(">>>>>>>"+Thread.currentThread().getName());
executor.execute(() -> {
System.out.println(Thread.currentThread().getName()+">>>>>执行");
countDownLatch.countDown();
long count = countDownLatch.getCount();
System.out.println(count);
});
}
countDownLatch.await();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>执行完毕");
}
}
疑问:
执行test()方法时,线程可以结束。但是在执行main方法时,线程阻塞。