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

时间:2011-12-23 03:04:11

标签: java multithreading jdbc

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

  • BUSINESS_CONTRACT
  • CLASSIFY_RECORD

表BUSINESS_CONTRACT存储业务合同的信息,我们每月对业务合同进行分类,并将分类结果存储在表CLASSIFY_RECORD中。

批处理作业每月运行一次,查询BUSINESS_CONTRACT以查找需要分类的业务合同并对其进行分类,然后将分类结果插入CLASSIFY_RECORD。

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

如何使用dispatcher-worker模式编写基本代码结构?

我学习java多线程,但主要找到了理论资源。现在我想用多线程来解决一个真正的问题,但是不知道如何编写第一行代码。

2 个答案:

答案 0 :(得分:2)

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

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

你会如何手动完成这项工作?假设你有这些作为纸质记录,并且不得不与同事分开任务。你会如何分工? 2人或20人? (这就是你可以分成多少个线程。)

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

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

答案 1 :(得分:0)

您使用的是批量更新吗?它可能比多线程进行单次更新更有意义。