gpt4 book ai didi

java - 具有固定池大小和许多任务的 ThreadPoolExecutor

转载 作者:行者123 更新时间:2023-12-01 15:49:41 26 4
gpt4 key购买 nike

我的 ThreadPoolExecutor 有问题。有一个包含许多文件名的列表。我想用多线程处理这些文件。我一次只需要 2 或 4 个线程(取决于处理器)。有时,如果文件很长,我会出现内存不足的异常。我调查了这个问题,但没有结果......

代码:

ThreadPoolExecutor executor = new   ThreadPoolExecutor(2, 2,
0L, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(20));

我将文件名存储在一个列表中,然后逐一迭代该列表并调用 execute() 方法。

for(String fileName : fileNames) {
executor.execute(new FileProcess(fileName));
}

然后 shutdown() poolThread 并等待每个线程完成。

    if (ProjectsHandler.withThread){
executor.shutdown();
while(!executor.isTerminated()) {
// wait until all threads are finish
}
}

所以我给出了内存不足的异常。探查器表示原因是 ThreadPoolExecutor。如果我用 1 个线程运行程序,一切正常,没有异常(exception)。

可能是什么问题?提前致谢

最佳答案

我认为问题与线程无关。如果您并行运行两个任务,并且它们都需要 256MB,而您只有 384MB(例如),那么您将耗尽内存。如果您按顺序运行它们而不使用线程,那就没问题(但需要更长的时间)。

您应该查看内存不足异常的原因。尝试减少 JVM 可用的内存,直到单线程版本触发它。这将使调试变得更容易。

关于java - 具有固定池大小和许多任务的 ThreadPoolExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357881/

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