gpt4 book ai didi

Java executorservice 正在关闭,即使它的线程正在运行

转载 作者:行者123 更新时间:2023-11-30 07:36:15 25 4
gpt4 key购买 nike

我正在使用 Executorsevice 从数据库生成文件。我正在使用 jdbc 和 core java 将表数据放入文件中。

创建具有 10 个线程的 Executorservice 后,我在 for 循环中提交 60 个线程以并行获取 60 个文件。这对于小数据和列数较少的表来说效果很好。但是,如果文件很大且表具有更多列,则在其他线程完成时,正在处理巨大表数据/更多列表的线程将停止,而不会在日志中提供任何信息。

ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (String filename : filenames) {
EachFileThread worker = new EachFileThread(destdir, converter,
filename, this);
executor.execute(worker);
}
executor.shutdown();

在每个文件线程中,我正在读取 xml 并获取列、表并形成查询,然后执行查询、格式化数据并将数据放入文件中

    forTable = (FileData) converter.convertFromXMLToObject( filename + ".xml");
String query = getQuery(forTable);
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(query);
resultSet.setFetchSize(3000);
WriteData(resultSet, filepath, forTable);(formatting the data from db and then writing to a file)

最佳答案

问题是您没有等待所有作业完成它们正在做的事情。正如 @msandiford 在评论中建议的那样,您应该添加对 awaitTermination(..) 的调用调用shutdown()后正如 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html 上的示例 shutdownAndAwaitTermination() 方法所示

例如,您可以尝试这样做:

ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (String filename : filenames) {
EachFileThread worker = new EachFileThread(destdir, converter, filename, this);
executor.execute(worker);
}
executor.shutdown();
try {
// Wait a while for existing tasks to terminate
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // Cancel currently executing tasks
// Wait a while for tasks to respond to being cancelled
if (!executor.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("Executor did not terminate");
}
} catch (InterruptedException ie) {
// (Re-)Cancel if current thread also interrupted
executor.shutdownNow();
// Preserve interrupt status
Thread.currentThread().interrupt();
}

关于Java executorservice 正在关闭,即使它的线程正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360215/

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