我需要在一个小编程练习中实现向量时钟,我决定使用Java。我的问题与操作进程的向量时钟的实际算法无关,但是如何从另一个Java程序中相对容易地初始化其他Java应用程序或子进程?
我的初步计划如下:我有一个“主程序”,它决定启动多少个客户/子项,然后这些子/客户端应相互通信并相应地更新其相应的矢量时钟。要启动的客户端数量取决于给予“主程序”的特定输入文件中的行数。启动这些客户端流程的最佳方式是什么?它们应该分别取两个文件和一个整数作为参数。这些文件告诉我们做什么(发送或提前时钟),整数告诉客户端应该从配置文件中的哪一行选择要使用的端口号。
答案 0 :(得分:2)
在java中,创建concurrent tasks的概念基于threads
而非processes
。要启动新的process
,通常必须多次调用java或使用ProcessBuilder接口。 java中的并发是为线程设计的,所以我建议你尝试一下,例如:
public static void main(String[] args) {
int numberOfThreads = ...
for(int i = 0; i < numberOfThreads; i++) {
File f1 = ...
File f2 = ....
int j = ...
new Thread(new VectorClock(f1, f2, j)).start();
}
}
public class VectorClock implements Runnable {
public VectorClock(File file1, File file2, int i) {
// ...
}
@Override
public void run() {
// this gets executed when invoked by a threads .start() routine
}
}
答案 1 :(得分:0)
在Java中查看this answer类似C的forks。