我有一个任务 T 以固定速率 R 运行。我有多个 java 程序 P1、P2 等,它们使用不同类型的输入独立执行此任务。我希望在所有程序同时运行时以 R 的速率完成任务。
所以我正在寻找的是实现一个不同的程序 P,它仅以 T 的速率完成任务,所有程序 P1 的输入, P2 等。换句话说,P1、P2 等生成数据,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/