gpt4 book ai didi

java - 在这种情况下如何清除 ArrayList 的大小(如果为 100):

转载 作者:行者123 更新时间:2023-12-01 20:23:16 26 4
gpt4 key购买 nike

我的最终目标是在执行器服务中实现行的批量处理。我有以下代码片段:

while ((bLine = bufferedReader.readLine()) != null) {
// We will use an array to hold 100 lines, so that we can batch process in a
// single thread
batchArray.add(bLine);
switch (batchArray.size()) {
case 100:
Future<?> future = executor.submit(new LocalThreadPoolExecutor(batchArray, closeableHttpClient, httpPost));
futures.add(future);
// batchArray.clear() <--- point of failure
break;
default:
logger.info("Batch size in switch: "+batchArray.size());

}
}

现在,如果我在 case 100 中执行 batchArray.clear(),我会得到一个并发修改异常。无法确定如何重新初始化数组列表并将 100 行发送到我的执行程序,因为它们是从文件中读取的。

下面是堆栈跟踪:

java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at consumer.ril.com.LocalThreadPoolExecutor.run(LocalThreadPoolExecutor.java:37)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

当我尝试读取在此类的构造函数中传递的batchArray 时,我在LocalThreadPoolExecutor 类中遇到异常。

最佳答案

简单的解决方案 - 您需要传递给 LocalThreadPoolExecutor 数组副本并清理原始数组。

Future<?> future = executor.submit(new LocalThreadPoolExecutor(new ArrayList<>
(batchArray), closeableHttpClient, httpPost));
futures.add(future);
batchArray.clear();

关于java - 在这种情况下如何清除 ArrayList 的大小(如果为 100):,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com