进程分叉、子进程等[Java]

进程分叉、子进程等[Java],java,multithreading,vector,timestamp,Java,Multithreading,Vector,Timestamp,我需要在一个小的编程练习中实现向量时钟,我决定使用Java实现它。我的问题与处理进程向量时钟的实际算法无关,而是如何从另一个Java程序相对容易地初始化其他Java应用程序或子进程 我最初的计划如下:我有一个“主程序”,它决定启动多少个客户机/子客户机,然后这些客户机/子客户机应该相互通信,并相应地更新它们相应的向量时钟。要启动的客户端数量取决于给定给“主程序”的特定输入文件中的行数。启动这些客户端进程最优雅的方式是什么?它们应分别采用两个文件和一个整数作为参数。这些文件告诉我们要做什么(发送或

我需要在一个小的编程练习中实现向量时钟,我决定使用Java实现它。我的问题与处理进程向量时钟的实际算法无关,而是如何从另一个Java程序相对容易地初始化其他Java应用程序或子进程


我最初的计划如下:我有一个“主程序”,它决定启动多少个客户机/子客户机,然后这些客户机/子客户机应该相互通信,并相应地更新它们相应的向量时钟。要启动的客户端数量取决于给定给“主程序”的特定输入文件中的行数。启动这些客户端进程最优雅的方式是什么?它们应分别采用两个文件和一个整数作为参数。这些文件告诉我们要做什么(发送或提前时钟),整数告诉我们客户端应该从配置文件中的哪一行选择要使用的端口号。

看看Java中类似C的分叉。

在Java中,创建的概念是基于
线程
而不是
进程
。要启动新的
进程
,通常必须多次调用java或使用接口。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
    }
}
publicstaticvoidmain(字符串[]args){
int numberOfThreads=。。。
for(int i=0;i
是否使用线程或Java的某些exec()变体或其他类似的东西。我以前没有做过任何需要并发操作的事情。此外,我担心如果客户机在初始化每个客户机之前开始读取输入并对其执行操作,我可能会遇到问题。这很容易防止吗?使用倒计时锁存器(java.util.concurrent.CountDownLatch)之类的工具来确保线程不会过早启动。如果要确保在第一次开始运行之前初始化所有线程,可以创建一个线程[],然后包括一个额外的循环,该循环为所有线程调用start()(无论如何,您都需要数组,以便轻松确定所有线程何时完成)