进程之间的通信(主)Java
我需要沟通各种流程,如下所示: 首先,我使用args[0]=1调用GeneralMain,因此它将调用A.main() 剩下的两个进程将在随机时间内启动,但两个进程需要同时启动进程之间的通信(主)Java,java,concurrency,process,parallel-processing,main,Java,Concurrency,Process,Parallel Processing,Main,我需要沟通各种流程,如下所示: 首先,我使用args[0]=1调用GeneralMain,因此它将调用A.main() 剩下的两个进程将在随机时间内启动,但两个进程需要同时启动 CyclicBarrier cyclicBarrier = new CyclicBarrier(2); //global scope B { //thread B's main cyclicBarrier.await(); //wait for other thread } C { //thread C's m
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
}
我的代码:
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接收参数[0]=1,并调用A.main()
所以,我执行了三次GeneralMain。在第一次启动A.main()并负责接收消息时,我在启动B.main()进程中执行GeneralMain并将第一条消息发送给A。最后,我在启动C.main()进程中执行GeneralMain并将第二条消息发送给A,但我需要B.main()和C.main()同时开始并同时发送他的消息
谢谢。您可以看看如何使用线程和runnable
您可以从main启动一个线程,然后使用两个线程同时启动的随机时间启动两个线程。一个线程调用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将或多或少同时开始执行其逻辑(不确定同步的准确程度)问题不清楚,您是否面临错误?我是西班牙文,因此很难表达问题:'(是的。因此,我执行GeneralMain三次。在第一次启动A.main()并负责接收消息时,我执行GeneralMain并启动B.main()处理并发送第一条消息。最后,我在启动C.main()过程中执行GeneralMain并发送第二条消息,但我需要B.main()和C.main()同时启动并同时发送他的信息为什么B和C需要在完全相同的时间启动?我需要证明交错的不同执行会产生不同的结果显示上次收到的消息,是的,我知道此解决方案,但我无法自动执行。必须手动启动B和C我想当我们“同时”交谈时,我们关注的是人工时间而不是计算机时间。在这种情况下,您可以使用原始代码并使用批处理脚本启动B和C。