我在数据库 (PostgreSQL) 中有很多数据,需要处理所有数据。我的程序有线程来处理所有这些数据并遵循这些逻辑。
- 从数据库中获取部分数据
- 过程
- 保存数据
我怀疑最好的方法是什么。我有三个想法:
创建一个在循环中运行的管理器类,该类从数据库获取数据并保存要处理的对象队列。创建一个在循环中运行的进程类,从管理器类获取要处理的对象。
与上面相同,但没有管理器类,因此进程类将在它之间共享对象队列,它们也将负责从数据库中获取数据。
在循环中运行的管理器类从数据库中获取数据,但它会创建包含要处理的数据的进程类,因此进程类不会向管理器请求任何内容。它被创建、处理和销毁,而不是循环运行。
我不知道什么更好,是否还有其他更有效的解决方案。
最佳答案
您描述的是所谓的经理- worker 模型。我认为你的第一个描述更好。
它将数据推送到队列中并由多个工作进程处理。您可以为 worker 使用线程池。 worker 们正在排队等候。一旦工作被推送到队列中,其中一名 worker 立即接手。完成后,他们可以将结果插入传出队列,然后另一个线程将数据发送到数据库。或者,每个 worker 都可以自己保存结果。这取决于你,取决于你的任务。
用户 Excecutors 和 BlockingQueue 用于实现。所有你需要的都在 java.util.concurrent
包中,你可以在网络上找到很多教程和示例如何使用它们。
祝你好运。
关于java - 管理执行同一任务的线程的最合适方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750680/