2015-11-18 24 views
0

之間的通信我需要,因爲它遵循通信的各種過程:進程(主)的Java

首先我調用GeneralMain與ARGS [0] = 1,所以它將調用a。主()。

剩餘的兩個進程將在隨機時間空間中啓動,但兩個進程都需要同時啓動。

我的代碼:

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。主();

所以,我執行了三次GeneralMain。 A.main()第一次啓動並負責接收消息,然後執行GeneralMain啓動B.main()進程併發送第一條消息給A.結束後,我執行GeneralMain啓動C.main ()進程並將第二條消息發送給A,但我需要B.main()和C.main()同時啓動並同時發送消息

謝謝。

+0

問題不明確,你是否面臨錯誤? – Perdomoff

+0

因爲我很難表達這個問題:'( –

+0

是的,所以我執行了三次GeneralMain,第一次啓動A.main(),它負責接收消息,然後執行GeneralMain啓動B.main()進程併發送第一條消息。最後,我執行GeneralMain來啓動C.main()進程併發送第二條消息,但是我需要B.main()和C.main()同時開始並同時發送他的消息 –

回答

0

你可能會看看使用線程和runnable的。

從主要你可以開始A然後開始2線程使用他們都將開始的隨機時間。一個線程調用B和其他調用C.

+0

是的,我知道這個解決方案,但我不能自動化它,必須手動啓動B和C –

+1

我想我們在談論「同時」時,我們正在尋找g在人類時間而不是電腦時間。在這種情況下,您可以堅持使用原始代碼並使用批處理腳本來啓動B和C. –

0

可以使用循環屏障來確保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和充當註冊方數量達到2屏障將跳閘和B和C將開始以更多或更少的同時執行其邏輯Ç將在屏障註冊自己並儘快(未確定同步的確切程度)