简而言之,我有一个List userIds,它的大小可以从10k到100k,这些都是user_ids的,我的核心逻辑是,对于每user_id,我调用两个不同的rest api终端并获取这些有效负载,然后在有效负载之间进行验证操作
我通过以下方式使用executor服务来加快处理速度,我将记录拆分为批处理和预定义的100个线程,以便1个线程可以处理(int)(userIds.size()/100)个用户
public void execute(List < String > userIds) {
int numberOfThreads = 100;
int WINDOW = (int) Math.floor(userIds.size() / numberOfThreads);
int st = 0;
int end = WINDOW;
for (; st < userIds.size();) {
int realStart = st;
int realEnd = end;
executor.execute(
() - > {
verify(realStart, realEnd, userIds) // this method has logic to verify users for the given start and end indexes from the userIds list
}
)
st = end + 1;
if (end + WINDOW >= userIds.size()) {
end = userIds.size() - 1;
} else {
end = st + WINDOW;
} // code to update the indexes realStart and realEnd for next 'n' batches
}
executor.shutDown();
try {
System.out.println("Done");
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
System.out.println("Done on a rope");
} catch (Exception e) {
e.printStackTrace();
}
}
比方说,对于10k记录,当它接近完成时,代码被卡住了,这让我想,如果ExecutorService中有几个线程被卡住了,如果是,我该如何解决它,或者我在这里是否有任何明显的缺陷?感谢您的帮助:)
假设有100个线程,一切都正常,您的系统可以处理它。
然后问题可以在方法中。比如说,你有10000个用户-
验证()
方法的逻辑无法处理它用户ID的
在列表userIds
中不是唯一的,并且多个线程正在尝试同时处理相同的userId,并且可能会被与该用户ID相关的一些资源锁定。注意:executor.await终止(Long.MAX_VALUE, TimeUnit. SECONDS);
只告诉执行器是否完成了它的处理,它不会在时间过去后强制它终止。根据Oracle的说法,正确的完成方式是:
executor.shutdown();
try {
if (!executor.awaitTermination(800, TimeUnit.MILLISECONDS)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
}
另一个注意事项:您可以使用而(st
问题内容: 当尝试使用maven构建Web应用程序时,当我的Internet连接处于连接状态时,通常会出现以下错误。 我的问题是,为什么在较早构建同一应用程序时,maven总是每次都要下载。 我的配置每次Maven都要下载时可能出什么毛病? 以下是我尝试离线构建时遇到的错误: 问题答案: 在您的元素(或项目的父级或公司父级POM)中查找该元素。它看起来像下面的样子。 注意元素。该示例告诉Maven
我有一个JavaScript应用程序,我正在与webpack捆绑。根据文档,我正在使用以下命令开始绑定: 每次我得到这个输出: 我已验证我的npx正在查看的目录。有人能想到为什么每次都在下载网页吗?完成此步骤最多需要7秒,这会减慢我的构建速度。
问题内容: 据我了解,默认容量为10,并且当其超过10时,它将创建具有新容量的新对象,依此类推。 因此,出于好奇,我输入下面的程序来检查的对象: 根据上述情况,当我未将默认初始容量设置为10时,因此在添加第11个元素时,它将创建一个新对象并增加的容量。 当我打印对象的哈希码时,每次都会给出一个新值。 以下是o / p: 根据默认容量的概念,直到第10个元素之前,都应打印相同的内容,因为在此之前不需
uniapp 为什么每次进来都会执行onLoad钩子? 症状:不管是第一次还是第N次进去都会执行onload,印象中应该只有第一次进来才会执行一次吧,有谁遇到过吗,难道是用redirectTo跳转才会这样吗
根据我对的理解,默认容量为10,当它超过10时,它将创建一个具有新容量的新对象,依此类推。 所以出于好奇,我键入以下程序来检查对象的: 根据上述场景,当我没有为设置初始容量时,默认值为10。因此,在添加第11个元素时,它将创建一个新对象,并增加的容量。 当我打印对象的hashcode时,它每次都会给出一个新的。 以下是o/p: 根据默认容量的概念,直到第10个元素,它应该打印相同的,因为在那之前不
每当我试图进入我的repo-git时,它都会同时请求