我需要按照如下方式进行各种流程的通信:
首先,我用args[0]=1调用GeneralMain,所以它将调用A.main().
剩下的两个进程将在随机时间内启动,但两个进程都需要同时启动。
我的代码:
public class GeneralMain {
public static void main(String[] args) {
int num_proc = Integer.parseInt(args[0]);
switch (num_proc) {
case 1:
A.main(...);
break;
case 2:
B.main(...);
break;
case 3:
C.main(...);
break;
default:
break;
}
}
}
首先GeneralMain接收args[0]=1,并调用A.main()。
所以,我执行了三次GeneralMain。在A.main()第一次启动并负责接收消息时,然后我执行启动B.main()进程并将第一条消息发送给A的GeneralMain。最后,我执行启动C.main()过程并将第二条消息发送到A的GeneralMain,但我需要B.main(
谢谢。
您可以考虑使用线程和可运行程序。
从main,您可以启动A,然后使用随机时间启动2个线程,在该时间它们都将启动。一个线程调用B,另一个调用C。
您可以使用循环屏障来确保B和C同时开始执行它们的逻辑。
CyclicBarrier cyclicBarrier = new CyclicBarrier(2); //global scope
B { //thread B's main
cyclicBarrier.await(); //wait for other thread
}
C { //thread C's main
cyclicBarrier.await(); //wait for other thread
}
基本上,B和C都会在屏障上注册自己,一旦注册方编号达到2,屏障就会跳闸,B和C将或多或少地同时开始执行他们的逻辑(不确定同步有多精确)