对于Java多进程通信,恐怕用的最多的要算socket了,当然还有各种其他的协议,如rmi、共享内存等。这里不讲这三者,而是谈下Java中比较简单父子进程流传递。Java没有明确定义一些进程相关的API,在这方面的内容非常少,不像C/C++直接使用操作系统的PIPE。Java的Process进程中有3个比较特殊的流函数,通过这3个函数,我们可以设计出一个简单的IPC进程模型。
如下图所示:
为了实现子进程之间的通信,我们将父进程设计成单纯的消息中转站。父进程不用处理业务逻辑,其实现可以设计为通用版本。
具体实现算法:
父进程工程:
步骤1:读取配置文件,获取需要生成进程的信息,包括自定义的进程名称,启动参数;
步骤2:启动所有进程;
步骤3:为每个进程设置开启2个线程,也就是读写线程,读线程添加一个监听器,当有数据时,调用该监听器的方法进行数据传递;写线程有一个消息队列,从进程A读取到的数据在监听器中进行处理,确定要转发给哪个进程(如B进程),将数据写入到B进程对应的写线程队列中
步骤4:如果子进程都退出,父进程退出
子进程工程:
步骤1:启动读写线程,读线程添加监听器(onRecv),写线程添加一个阻塞队列
步骤2:进程退出之前,通知父进程;