2012-09-07 134 views
0

我想運行保存在我的本地磁盤多次jar文件。該jar文件應該在給定的實例中運行多次。 所有的jar文件(相同的文件)應該一起運行。有沒有辦法實現它? 我是否必須編寫一個代碼,以創建多個線程?運行相同的jar文件多次同時

現在暫時我打開了許多命令提示符,separetly調用在CMD罐子,因此同時運行它們。 但這不是一個有效的方法。有沒有更有效的方法來做到這一點?

任何幫助將是非常讚賞。

+2

定義「在一起」,「同時」,「高效」。 – 2012-09-07 08:08:51

+0

@Tichodroma同時:當所有的jar文件都在同一個實例中運行。在一起:這是類似於我在上面的帖子同時。高效:我無法打開20-30釐米的窗戶並單獨運行,重負載到處理器上。 – Spaniard89

+0

你有多少個CPU?如果您有8個內核,每個進程使用1-2個CPU,則可能會發現運行4-8是最佳解決方案。 –

回答

1

我無法打開上漲20-30 cmd窗口,並分開運行,其重載到處理器

你的(20-30)-1的JVM與方法的開銷。您可以創建第二個主類是這樣的:

public static void main(final String[] args) { 
    int numberOfSimultaneousExecutions = 25; 
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions); 
    for (int i = 0; i < numberOfSimultaneousExecutions; i++) { 
     executor.execute(new Runnable() { 
      @Override 
      public void run() { 
       RealMainClass.main(args); 
      } 
     }); 
    } 
} 

現在JAR在一個 JVM同時運行。

然而,這是危險的。如果你的代碼訪問(和修改)任何共享的靜態值您的應用程序幾乎肯定突破

您還可以同時執行的數量從參數:

public static void main(final String[] argsWithNum) { 
    int numberOfSimultaneousExecutions = Integer.parseInt(argsWithNum[0]); 
    final String[] args = new String[argsWithNum.length - 1]; 
    System.arraycopy(argsWithNum, 1, args, 0, args.length); 
    java.util.concurrent.Executor executor = java.util.concurrent.Executors.newFixedThreadPool(numberOfSimultaneousExecutions); 
    ... 
+0

我是否必須將這段代碼嵌入到我的主類中?如果我這樣做,一個班級如何積累兩個主要的? – Spaniard89

+1

@Kishorepandey不,您應該使用該主要方法創建一個**第二**主類,並用代碼中的「RealMainClass」替換正常主類的名稱。 –

+0

對不起夥伴,我現在明白了。 RealMainclass是我想要多次運行的類的名稱! – Spaniard89

0

要運行需要一個線程的東西。如果你想同時運行多次,你需要多個線程。並不是所有的代碼都是線程安全的,所以如果你這樣做,你需要檢查代碼的行爲是否正確。

+0

如何檢查,我將如何完成創建多個線程? – Spaniard89

+0

我會將任務提交給ExecutorService(google瞭解更多詳情)。確保代碼是線程安全的唯一方法是閱讀文檔,如果沒有說明,請閱讀代碼以瞭解其工作原理。運行多個進程可能是最簡單的解決方案。 –

相關問題