进程之间的通信(主)Java

进程之间的通信(主)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

我需要沟通各种流程,如下所示:

首先,我使用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 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。