gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:03:02 26 4
gpt4 key购买 nike

我们有一个 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/

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