2011-02-09 103 views
0

我需要在一个小的编程练习中实现向量时钟,并且我决定使用Java。我的问题与操纵流程向量时钟的实际算法无关,但如何从其他Java程序相对容易地初始化其他Java应用程序或子进程?进程分叉,子进程等[Java]

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

+0

那么,你的问题是什么? – 2011-02-09 11:48:48

+0

是否使用Java的线程或某些exec()变体或其他类似的东西。我以前没有做过需要并发操作的任何事情。另外,我担心如果客户端在每个客户端初始化之前开始阅读他们的输入并采取行动,我可能会遇到问题。这容易被阻止吗? – treiman 2011-02-09 11:50:56

回答

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 
    } 
}