java - 用于从数据库读取和更新 REST 服务器的多线程 Java 控制台应用程序

标签 java multithreading rest java-threads

我开发了一个 Java 控制台应用程序,它执行以下操作;

  1. 从 Oracle 数据库中获取产品详细信息,例如产品 ID、名称、成本等,并将其放入 map (例如 dbMap)中 - 一个产品可以有多个记录,因为有子产品。

    <
  2. 从 REST 服务器获取类似的产品详细信息并将其存储在 map 中(例如restMap)

  3. 由于数据库具有正确的数据,因此比较两个映射 - dbMap 和 RestMap,并确定应从 REST 服务器添加、替换和删除的内容。

  4. 为此,我为每个产品创建一个 JSON 补丁请求 - 包括添加、替换、删除操作(每个产品大约数百个)并将其发送到 REST 服务器。

但是,我发现执行所有这些操作需要几分钟的时间,并且所有这些操作都以线性方式发生 - 数据库调用、其余服务器调用、比较以及最后修补到 REST 服务器。

我假设,如果我可以获取产品列表并逐个产品,每个产品在其自己的线程中并并行运行这些线程,而不是在单个线程中处理所有数据,那么它可能会更快.

因此,每个线程可能会执行以下操作 - 从数据库和 REST 服务器获取一种产品的产品详细信息,比较它们并为该产品生成补丁请求(使用添加/删除/替换操作)并将其发送到REST 服务器。

您能否建议我如何在 Java 中实现这种类型的线程架构? (似乎有几种方法,如线程池、AKKA 等,我很困惑。)

最佳答案

由于 dbCall 和 RestCall 不相互依赖,因此您可以在 2 个线程中进行并行调用。并有一个专用线程来处理比较。

您可以在此处使用生产者消费者方法。

您可以使用执行器服务来使用线程池:

http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

关于java - 用于从数据库读取和更新 REST 服务器的多线程 Java 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804491/

相关文章:

java - 我找不到 oracle.wsm.common.config.WsmConfig 的 jar

C++ 并发写入 bool 数组(不是 std::vector)

java - JAX-RS jersey ExceptionMappers 用户定义的异常

java - 尝试验证签名时,抛出异常 : java. io.IOException:序列标记错误

java - 从 eclipse e4 中的处理程序更新 View

JAVA - 忽略包含 "#"的部分字符串

ios - DispatchQueue.main.async 和 DispatchQueue.main.sync 的区别

java - 如何为可调用线程命名?

rest - 在 RESTful API 中包含/嵌入与链接

rest - 如何保护 flask 上的 REST Api