java - 多生产者,单一消费者的情况

标签 java multithreading producer-consumer

我有一个任务 T 以固定速率 R 运行。我有多个 java 程序 P1P2 等,它们使用不同类型的输入独立执行此任务。我希望在所有程序同时运行时以 R 的速率完成任务。
所以我正在寻找的是实现一个不同的程序 P,它仅以 T 的速率完成任务,所有程序 P1 的输入, P2 等。换句话说,P1P2 等生成数据,P 使用这些数据执行 < em>T 速率 R
我不知道的是如何制作一个可以被不同程序访问的动态队列(可能是 LinkedBlockingQueue)。

想法?

PS:如果不会Java,我也可以用C/C++。我更喜欢 Java 的解决方案,因为程序现在是 Java 的

最佳答案

好的,实现一个公开某种接口(interface)的程序。最简单的接口(interface)是从套接字读取,甚至只是从 STDIN 读取。你必须定义协议(protocol)。例如,您可以使用标准的 java 序列化。

现在所有程序 P1、P2 等都将“写入”命令到流中。执行任务的程序将读取它们、存储在队列中并使用您的自定义实现、java.util.Timer 或 Executors 按指定顺序执行。

Deamon线程在这里无关紧要。守护线程是一个线程,当所有其他(非守护)线程已终止时,它不会阻止程序终止。

您可以按照您描述的那样将所有这些实现为单独的 Java 进程。我真的不明白为什么。您可能考虑过使用 JMS 吗?它将允许您完全解耦模块并将其作为一个进程使用,也将其作为单独的进程使用。

关于java - 多生产者,单一消费者的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6857124/

相关文章:

java - 使用java向特定客户端发送消息

C# 无法关闭后台 worker 创建的表单

c++ - 使用带有 qt c++ 的 mavlink 协议(protocol)从串口读取

c# - 如何在 Action 中传递字符串参数?

C#等待生产者/消费者中的多个事件

java - SynchronousQueue 与 TransferQueue 之间的区别

java - 在适当的时候更新线程

java - 单个 XSLT 文件能解决这个问题……还是……?

java - test 和 src 目录/代码之间的差异在 test 文件夹中不起作用

c++ - Qt同步不可能在这里?