处理分叉,子进程等[Java]

时间:2011-02-09 11:47:06

标签: java multithreading vector timestamp

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

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

2 个答案:

答案 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。