我有一个任务 T 以固定费率 R 运行。我有多个java程序 P1 , P2 等,可以使用不同类型的输入独立完成此任务。我希望在所有程序同时运行的同时以 R 的速率完成任务
所以我正在寻找的是实现一个不同的程序 P ,它只使用来自所有程序 P1 的输入以 T 的速率完成任务, P2 等。换句话说, P1 , P2 等生成数据, P 用于执行< em> T 的速率 R
我不知道的是如何建立一个可以被不同程序访问的动态队列(LinkedBlockingQueue)。
想法?
PS:如果不是Java,我也可以使用C / C ++。我更喜欢Java中的解决方案,因为程序现在是Java
答案 0 :(得分:2)
好的,实现一个暴露某种界面的程序。最简单的接口是从套接字读取,甚至只是读取STDIN。你必须定义协议。例如,您可以使用标准的Java序列化。
现在你所有的程序P1,P2等都会将命令“写入”流。执行任务的程序将读取它们,存储在队列中并使用您的自定义实现java.util.Timer或Executors以指定的顺序执行。
Deamon线程在这里无关紧要。 Deamon线程是一个线程,它不会阻止程序在所有其他(非deamon)线程终止时终止。
您可以像描述为单独的java进程一样实现所有这些。我真的不明白为什么。您是否考虑过使用JMS?它将允许您完全解耦模块并使用作为一个过程和单独的过程。
答案 1 :(得分:1)
如果你真的想要一个单独的线程,而不是一个单独的进程,那么我建议如下:
scheduleAtFixedRate()
方法将此runnable添加到线程池中。