java - 在 JDBC 批处理作业中使用多线程

标签 java multithreading jdbc

我们有一个 JDBC 批处理作业。有两个表:

  • 业务契约(Contract)
  • CLASSIFY_RECORD

表BUSINESS_CONTRACT存储业务契约(Contract)信息,我们每月对业务契约(Contract)进行分类,并将分类结果存储在表CLASSIFY_RECORD中。

批处理作业每月运行一次,查询 BUSINESS_CONTRACT 中是否有需要分类的业务契约(Contract)并对其进行分类,然后将分类结果插入到 CLASSIFY_RECORD 中。

批处理作业现在在单线程中运行,我想让它以多线程运行

我应该如何使用调度程序-工作人员模式编写基本代码结构?

我学习了java多线程,但是找到的大多是理论资源,现在想用多线程解决一个实际问题,但是不知道第一行代码怎么写。

最佳答案

首先,您是否需要增加多线程的复杂性?您当前的流程需要多长时间才能运行?您要运行此程序的服务器上是否有多个可用的 CPU 或多个 CPU 内核,这将使多线程受益?

我不会为你编写代码,但可以给你一些指导......

您将如何手动完成这项工作?假设您有这些纸质记录,并且必须与同事分摊任务。你会如何分配工作? 2人还是20人之间? (这就是您可以将其分成多少个线程。)

弄清楚这些详细信息后,您可以创建多个线程(您的工作人员,使用父“调度程序”代码) - 每个线程都配置为仅从查询中选择结果的一部分。您应该保留对每个线程的引用,并在每个线程全部启动后调用 .join(),以便等待整个批处理完成。如果存在大量数据,难以拆分为相等的工作单元(无论出于何种原因,将 1,000 条记录分为 500 和 500 可能需要 75% 和 25% 的资源),您可能需要考虑拆分工作分成更小的单元(比线程更多的单元),然后让调度程序继续将工作单元提供给工作人员,直到分配完所有工作。

还要考虑一下,这些划分的工作职能是否真正不同?如果一个工作单元由于某种原因失败并且需要在数据库中回滚,这是否意味着所有其他工作单元都需要停止并且任何现有的插入也需要回滚?

关于java - 在 JDBC 批处理作业中使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611862/

相关文章:

java - HashMap 中的列表删除一个值

c++ - 为什么这个包含 rand() 的 C++11 代码多线程比单线程慢?

sql-server - 在哪里可以找到 sqljdbc_xa.dll 文件?

java - 使用 Maven (Java) 在服务器上找不到适合 jdbc :mysql, 的驱动程序

java - Maven testResource 过滤在 pom.xml 中不起作用

java - 类无法实例化

java - XML 架构验证 : Cannot find the declaration of element (root)

java - notify() 调用的位置重要吗?(Java)

.net - 为什么我无法更改 .NET 中的 Thread.Name?

jdbc - 如何获取 hive jdbc 连接的 Yarn 应用程序 ID?