- 创建一个线程池 threadPoolExecutor 线程数量为threadCount,
- 执行methodA()方法,threadCount次
- 等待线程池的线程全部执行完,即latch为0
- shutdown()线程池
@Test
public void test(int threadCount) {
ExecutorService threadPoolExecutor = new ThreadPoolExecutor(
threadCount/2,
threadCount,
1L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(threadCount),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
CountDownLatch latch = new CountDownLatch(threadCount);
//循环执行methodA()方法
for (int count = threadCount; count > 0; count--) {
threadPoolExecutor.submit(() -> {
try {
methodA( );
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
latch.countDown();
}
});
}
//阻塞当前主线程,直到latch等于0
try {
//阻塞当前线程,直到计数器的值为0
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//关闭线程池
threadPoolExecutor.shutdown();
}