我有一个方法,让我们说100k http调用API,因此,我同时进行http调用,以避免http瓶颈.但我也希望在不阻塞任何线程的情况下对整个方法计时.
ExecutorService service = Executors.newFixedThreadPool(500);
for (int i = 0; i < 100_000; i++) {
int finalI = i;
Runnable runnable = () -> {
// My http call goes here....
};
service.submit(runnable);
}
1条答案
按热度按时间dba5bblo1#
如果你想大致了解整个操作所需的时间,那么先使用
shutdown
,然后使用awaitTermination
,等待执行器服务完成所有提交的任务。将
System.out.println
或其他日志记录放在任务中并不是一个好主意,因为这样做只是对控制台I/O计时,而无法估计处理速度。正如注解中所述,对同一组服务器/资源/磁盘使用多线程访问可能会使总体运行时间变长或在其他地方导致问题。
在JDK 19中,
ExecutorService
是AutoCloseable
,因此您可以简化try块并删除finally: